Maksud setiap nombor ID 18 digit
1-2 digit wilayah, wilayah autonomi atau kod perbandaran;
3-4 digit bandar peringkat wilayah, liga, kod wilayah autonomi;
5-6 digit daerah, bandar peringkat daerah, kod daerah;
7-14 digit tarikh lahir, contohnya, 19670401 mewakili 1 April 1967
Digit 15-17 ialah nombor jujukan, di mana 17 digit ialah nombor ganjil untuk lelaki dan nombor genap untuk wanita;
18 digit adalah kod semak, 0-9 dan X, dijana secara rawak oleh formula
Contoh:
34 ialah Wilayah Anhui
05 ialah Bandar Ma’anshan
19800101 ialah tarikh lahir (1 Januari 1980)
001 ialah nombor jujukan (1 ialah nombor ganjil, mewakili lelaki)
3 ialah kod pengesahan
Kod bahagian pentadbiran
Bandar Beijing (110000 BJ)
Wilayah Hebei (130000 HE)
Wilayah Shanxi (140000 SX)
Wilayah Autonomi Mongolia Dalam (150000 NM)
Wilayah Liaoning (210000 LN)
Wilayah Jilin (220000 JL)
Wilayah Heilongjiang (230000 HL)
Shanghai (310000 SH)
Wilayah Jiangsu (320000 JS)
Wilayah Zhejiang (330000 ZJ)
Wilayah Anhui (340000 AH)
Wilayah Fujian (350000 FJ)
Wilayah Jiangxi (360000 JX)
Wilayah Shandong (370000 SD)
Wilayah Henan (410000 HA)
Wilayah Hubei (420000 HB)
Wilayah Hunan (430000 HN)
Wilayah Guangdong (440000 GD)
Wilayah Autonomi Guangxi Zhuang (450000 GX)
Wilayah Hainan (460000 HI)
Bandar Chongqing (500000 CQ)
Wilayah Sichuan (510000 SC)
Wilayah Guizhou (520000 GZ)
Wilayah Yunnan (530000 YN)
Wilayah Autonomi Tibet (540000 XZ)
Wilayah Shaanxi (610000 SN)
Wilayah Gansu (620000 GS)
Wilayah Qinghai (630000 QH)
Wilayah Autonomi Ningxia Hui (640000 NX)
Wilayah Autonomi Uygur Xinjiang (650000 XJ)
Wilayah Taiwan (710000 Tw)
SAR Hong Kong (810000 HK)
Macau SAR (820000 Bln)
Kaedah pengiraan digit ke-18 kad pengenalan (kod semak)
Darabkan 17 digit pertama nombor ID dengan pekali yang berbeza;
Pekali dari kedudukan pertama hingga ketujuh belas ialah: 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
Tambahkan hasil darab nombor dan pekali 17 digit ini;
Bahagikan hasil tambah dengan 11 untuk melihat bakinya
Nombor ID terakhir yang sepadan ialah 1-0-X-9-8-7-6-5-4-3-2
Daripada perkara di atas, kita tahu bahawa jika bakinya ialah 2, angka Rom X akan muncul pada digit ke-18 kad pengenalan. Jika bakinya ialah 10, nombor terakhir pada kad pengenalan ialah 2.
Contoh:
Nombor ID lelaki tertentu ialah 340523198001010013. Kita perlu melihat sama ada kad pengenalan ini adalah kad pengenalan yang sah.
Mula-mula kita mendapat jumlah produk bagi 17 digit pertama:
(3*7+4*9+0*10+5*5+2*8+3*4+1*2+9*1+8*6+0*3+0*7+1*9+0 *10+1*5+0*8+0*4+1*2) = 185
Kemudian minta baki:
185 % 11 = 9
Akhirnya, melalui peraturan yang sepadan, kita boleh tahu bahawa nombor yang sepadan dengan baki 9 ialah 3. Oleh itu, ia boleh ditentukan bahawa ini adalah nombor ID yang layak.
JavaScript untuk mengesahkan kad ID 18 digit
Salin kod
if(!/^\d{17}(\d|x)$/i.test(ID)) return false; // \d 匹配数字 // ^ 匹配开始 // $ 匹配结尾 // i 不区分大小写 // {17} 匹配17次 // \d|x 匹配数字或x
// Selain menggunakan sintaks titik (.) semasa mengakses sifat objek, anda juga boleh menggunakan kurungan segi empat sama ([]) Penggunaan kurungan segi empat sama adalah lebih fleksibel
if(city[ID.substr(0,2)] === undefined) return "非法地区";
var birthday = ID.substr(6, 4) + '/' + Number(ID.substr(10, 2)) + '/' + Number(ID.substr(12, 2)); var d = new Date(birthday); var newBirthday = d.getFullYear() + '/' + Number(d.getMonth() + 1) + '/' + Number(d.getDate()); var currentTime = new Date().getTime(); var time = d.getTime(); if(time >= currentTime || birthday !== newBirthday) return '非法生日'; // 获取身份证的年月日,然后再 new 一个 Date,再对比这两个日期是否一致 // 这里用Number()主要是因为身份证的日期是带0的,而new Date()出来的日期是不带0的,Number()之后就都不带0了
Kod penuh
var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; var sum = 0, i, residue; for(i=0; i<17; i++) { sum += ID.substr(i, 1) * arrInt[i]; } residue = arrCh[sum % 11]; if (residue !== ID.substr(17, 1)) '非法证号';