Arrêtez de dire des bêtises et allez directement au code. L'analyse est très claire dans les commentaires, il n'y aura donc pas de BB ici.
/*
Conformément aux réglementations sur les numéros d'identité des citoyens dans la norme nationale de la République populaire de Chine GB 11643-1999, le numéro d'identité des citoyens est un code combiné caractéristique, composé d'un code corporel à dix-sept chiffres et d'un code de contrôle à un chiffre. L'ordre de gauche à droite est le suivant : code d'adresse à six chiffres, code de date de naissance à huit chiffres, code de séquence à trois chiffres et code de contrôle à un chiffre.
Le code d’adresse représente le code de division administrative du comté (ville, bannière, district) où se trouve la résidence permanente de l’objet de codage.
Le code de date de naissance représente l'année, le mois et le jour de naissance de l'objet de codage, où l'année est représentée par quatre chiffres et aucun séparateur n'est utilisé entre l'année, le mois et le jour.
Le code de séquence indique le numéro de séquence attribué aux personnes nées la même année, le même mois et le même jour dans la zone identifiée par le même code d'adresse. Les nombres impairs dans le code séquentiel sont attribués aux hommes et les nombres pairs sont attribués aux femmes.
Le code de contrôle est un code de contrôle calculé sur la base du code de contrôle à dix-sept chiffres précédent et conformément au code de contrôle ISO 7064:1983.MOD 11-2.
Comment calculer la date de naissance.
Le code de la carte d'identité étend d'abord l'année de naissance à 4 chiffres. Ajoutez simplement un 19 ou un 18, afin que toutes les personnes nées entre 1800 et 1999 soient incluses
.
Ceux qui sont nés après 1800 doivent être au 18ème chiffre et n'ont pas ce problème. Quant à ceux nés avant 1800, ils n'avaient probablement pas de numéro d'identification à cette époque, ⊙﹏⊙bhan...
Voici l'expression régulière :
Date de naissance 1800-2099 (18|19|20)?d{2}(0[1-9]|1[12])(0[1-9]|[12]d|3[01])
Expression régulière de la carte d'identité/^d{6}(18|19|20)?d{2}(0[1-9]|1[12])(0[1-9]|[12]d|3 [ 01])d{3}(d|X)$/i
Règles de vérification des chiffres Code d'adresse à 6 chiffres Date de naissance à 6 chiffres Numéro de séquence à 3 chiffres
Règles de vérification des bits : code d'adresse à 6 chiffres, date de naissance à 8 chiffres, numéro de séquence à 3 chiffres, chiffre de contrôle à 1 chiffre
Formule de règle de contrôle des chiffres : ∑(ai×Wi)(mod 11)…………………………………………(1)
En formule (1) :
i---- représente le numéro de séquence de position des caractères numériques de gauche à droite, y compris le code de contrôle
;
ai---- représente la valeur du caractère numérique à la i-ième position
Wi---- représente le facteur de pondération à la i-ème position, et sa valeur est calculée selon la formule Wi=2^(n-1) (mod 11).
je 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
*/
//Vérification de la légalité du numéro d'identification
//Prend en charge les numéros d'identification à 15 et 18 chiffres
// Prise en charge du codage d'adresse, de la date de naissance, de la vérification des chiffres
function IdentityCodeValid(code) {
var city={11:"Pékin",12:"Tianjin",13:"Hebei",14:"Shanxi",15:"Mongolie intérieure",21:"Liaoning",22:"Jilin",23:" Heilongjiang ",31 :"Shanghai",32 :"Jiangsu",33 :"Zhejiang",34 :"Anhui",35 :"Fujian",36 :"Jiangxi",37 :"Shandong",41 :"Henan" , 42 : « Hubei », 43 : « Hunan », 44 : « Guangdong », 45 : « Guangxi », 46 : « Hainan », 50 : « Chongqing », 51 : « Sichuan », 52 : « Guizhou », 53. : "Yunnan", 54: "Tibet", 61: "Shaanxi", 62: "Gansu", 63: "Qinghai", 64: "Ningxia", 65: "Xinjiang", 71: "Taïwan", 81:" Hong Kong ",82 :"Macao",91 :"Outre-mer"};
var pointe = "";
var pass=true;
if(!code || !/^d{6}(18|19|20)?d{2}(0[1-9]|1[12])(0[1-9]|[ 12]d|3[01])d{3}(d|X)$/i.test(code)){
tip = "Le format du numéro de carte d'identité est incorrect";
passer = faux ;
>
sinon if(!city[code.substr(0,2)]){
tip = "Encodage d'adresse incorrect";
passer = faux ;
>
autre{
//La carte d'identité à 18 chiffres doit vérifier le dernier chiffre de contrôle
si(code.length == 18){
code = code.split('');
//∑(ai×Wi)(mod 11)
//Facteur de pondération
var facteur = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
//Chiffre de contrôle
var parité = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
var somme = 0;
var ai = 0;
var wi = 0;
pour (var je = 0; je < 17; je )
{
ai = code[i];
wi = facteur[i];
somme = ai * wi;
>
var dernier = parité[somme % 11];
if(parité[somme % 11] != code[17]){
tip = "Erreur de chiffre de vérification";
passer =faux;
>
>
>
if(!pass) alert(tip);
laissez-passer retour ;
>
var c = '130981199312253466';
var res= IdentityCodeValid(c);
Qu'en est-il ? Il s'agit d'un premier code de vérification de numéro d'identification très complet. Il n'a tout simplement pas la même dimension que les autres codes de vérification trouvés en ligne, prenez-le et utilisez-le si vous en avez besoin.