La signification de chaque numéro d'identification à 18 chiffres
Code de province, de région autonome ou de municipalité à 1-2 chiffres
Ville, ligue, code de préfecture autonome à 3-4 chiffres ;
Comté à 5-6 chiffres, ville au niveau du comté, code de district
7 à 14 chiffres de la date de naissance, par exemple, 19670401 représente le 1er avril 1967
;
Les chiffres 15 à 17 sont des nombres séquentiels, dont 17 chiffres sont des nombres impairs pour les hommes et des nombres pairs pour les femmes
;
18 chiffres sont un code de contrôle, 0-9 et X, générés aléatoirement par la formule
;
34 est la province d'Anhui
05 est la ville de Ma'anshan
23 est le comté de He
19800101 est la date de naissance (1er janvier 1980)
001 est le numéro de séquence (1 est un nombre impair, représentant un homme)
3 est le code de vérification
Ville de Pékin (110 000 BJ)
Ville de Tianjin (120 000 TJ)
Province du Hebei (130 000 HE)
Province du Shanxi (140 000 SX)
Région autonome de Mongolie intérieure (150 000 NM)
Province du Liaoning (210 000 LN)
Province du Jilin (220 000 JL)
Province du Heilongjiang (230 000 HL)
Shanghai (310000 SH)
Province du Jiangsu (320 000 JS)
Province du Zhejiang (330 000 ZJ)
Province d'Anhui (340 000 AH)
Province du Fujian (350 000 FJ)
Province du Jiangxi (360 000 JX)
Province du Shandong (370 000 SD)
Province du Henan (410 000 HA)
Province du Hubei (420 000 HB)
Province du Hunan (430 000 HN)
Province du Guangdong (440 000 GD)
Région autonome Zhuang du Guangxi (450 000 GX)
Province de Hainan (460 000 HI)
Ville de Chongqing (500 000 CQ)
Province du Sichuan (510000 SC)
Province du Guizhou (520 000 GZ)
Province du Yunnan (530 000 YN)
Région autonome du Tibet (540000 XZ)
Province du Shaanxi (610 000 SN)
Province du Gansu (620 000 GS)
Province du Qinghai (630 000 QH)
Région autonome Hui du Ningxia (640 000 NX)
Région autonome ouïgoure du Xinjiang (650 000 XJ)
Province de Taïwan (710 000 Tw)
RAS de Hong Kong (810000 HK)
RAS de Macao (820000 Mo)
Multipliez les 17 premiers chiffres du numéro d'identification par différents coefficients
Les coefficients de la première à la dix-septième position sont : 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
Additionnez les résultats de la multiplication de ces nombres et coefficients à 17 chiffres
Divisez la somme par 11 pour voir quel est le reste
Le reste ne peut être que de 11 chiffres : 0-1-2-3-4-5-6-7-8-9-10
;
Le dernier numéro d'identification correspondant est 1-0-X-9-8-7-6-5-4-3-2
De ce qui précède, nous savons que si le reste est 2, le chiffre romain X apparaîtra sur le 18ème chiffre de la carte d'identité. Si le reste est 10, le dernier chiffre sur la carte d'identité est 2.
Exemple :
Le numéro d’identification d’un certain homme est le 340523198001010013. Nous devons voir si cette carte d’identité est une carte d’identité légale.
(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
Demandez ensuite le reste :
185%11=9
Enfin, grâce aux règles correspondantes, on peut savoir que le nombre correspondant au reste 9 est 3. Par conséquent, on peut déterminer qu’il s’agit d’un numéro d’identification qualifié.
if(!/^\d{17}(\d|x)$/i.test(ID)) return false; // \d 匹配数字 // ^ 匹配开始 // $ 匹配结尾 // i 不区分大小写 // {17} 匹配17次 // \d|x 匹配数字或x
if(city[ID.substr(0,2)] === undefined) return "非法地区";
// En plus d'utiliser la syntaxe point (.) lors de l'accès aux propriétés de l'objet, vous pouvez également utiliser des crochets ([] L'utilisation de crochets est plus flexible
).
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了
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)) '非法证号';
Code complet
<script> function checkID(ID) { if(typeof ID !== 'string') return '非法字符串'; var city = {11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江 ",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北 ",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏 ",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}; 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(); 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; if(!/^\d{17}(\d|x)$/i.test(ID)) return '非法身份证'; if(city[ID.substr(0,2)] === undefined) return "非法地区"; if(time >= currentTime || birthday !== newBirthday) return '非法生日'; for(i=0; i<17; i++) { sum += ID.substr(i, 1) * arrInt[i]; } residue = arrCh[sum % 11]; if (residue !== ID.substr(17, 1)) return '非法身份证哦'; return city[ID.substr(0,2)]+","+birthday+","+(ID.substr(16,1)%2?" 男":"女") } </script>