Voici le code à utiliser JS pour vérifier la validité du numéro de carte d'identité selon les règles d'encodage
Le code IdCard-Validate.js est le suivant :
/**
* Règle d'encodage à 15 chiffres de la carte d'identité : jjjj aammjj xx p
* jjddd : indicatif régional
* aammjj : date de naissance
* xx : encodage séquentiel, ne peut pas être déterminé
* p : Sexe, les nombres impairs sont masculins, les nombres pairs sont féminins
*
* Règles d'encodage à 18 chiffres de la carte d'identité : jjjjj aaaammjj xxx y
* jjjj : indicatif régional
* aaaammjj : année de naissance, mois et jour
* xxx : code séquentiel, ne peut être déterminé, les nombres impairs sont masculins, les nombres pairs sont féminins
* y : Vérifiez le code, la valeur de ce chiffre peut être obtenue en calculant le 17 premiers chiffres
*
* Le facteur de pondération du numéro à 18 chiffres est (de droite à gauche) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ]
* Chiffre de vérification Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3 , 2 ]
* Formule de calcul des chiffres de contrôle : Y_P = mod( ∑(Ai×Wi),11 )
* i est les 2...18 chiffres du numéro de carte d'identité de droite à gauche ; la position du tableau de codes de contrôle où se trouve le code de contrôle du pied
*
*/
var Wi = [ 7, 9 , 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // Facteur de pondération
var ValideCode = [ 1, 0, 10 , 9, 8, 7, 6, 5, 4, 3, 2 ]; // Valeur du bit de vérification de la carte d'identité. 10 représente X
function IdCardValidate(idCard) {
idCard = trim(idCard.replace(/ /g, ""));
if (idCard.length == 15) {
return isValidityBrithBy15IdCard(idCard);
} else if (idCard.length == 18) {
var a_idCard); = idCard.split(""); // Récupère le tableau de la carte d'identité
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
return true
}else {
return false; 🎜>}
} else {
return false;
}
}
/**
* Déterminez si le dernier chiffre de vérification est correct lorsque le numéro d'identification est composé de 18 chiffres
* @param a_idCard Tableau de numéros de carte d'identité
* @return
*/
function isTrueValidateCodeBy18IdCard(a_idCard) {
var sum = 0 ; // Déclarer la variable somme pondérée
if (a_idCard[17].toLowerCase() == 'x') {
a_idCard[17] = 10;// Remplacer le dernier chiffre du code de vérification par x par 10 pour faciliter les opérations ultérieures
}
for ( var i = 0; i < 17; i ) {
sum = Wi[i] * a_idCard[i];// Somme pondérée
}
valCodePosition = sum % 11;/ / Obtenir la position du code de vérification
if (a_idCard[17] == ValideCode[valCodePosition]) {
return true
} else {
return false; ;
}
}
/**
* Déterminez si vous êtes un garçon ou une fille en fonction de votre carte d'identité
* @param idCard Numéro d'identification à 15/18 chiffres
* @return 'female'-female, 'male'-male
*/
function maleOrFemalByIdCard(idCard){
idCard = trim(idCard.replace(/ /g, ""));/ / Traitez le numéro d'identification. Incluez des espaces entre les caractères.
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return 'female'
}else{
return 'male';
}
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return 'femelle ';
}else{
return 'male';
}
}else{
return null
// Les caractères entrants peuvent être directement traités comme un array Pour gérer
// if(idCard.length==15){
// alert(idCard[13]);
// if(idCard[13]%2==0){
// return 'femelle';
// }else{
// return 'male'
// }
// }else if(idCard.length==18){
// alert(idCard[16]);
// if(idCard[16]%2==0){
// return 'femelle';
// }else{
// return 'male';
// }
// }else{
// return null
// }
}
/**
* Vérifiez si l'anniversaire indiqué dans le numéro de carte d'identité à 18 chiffres est un anniversaire valide
* @param idCard Chaîne de carte d'identité à 18 chiffres
* @return
* /
function isValidityBrithBy18IdCard(idCard18){
var année = idCard18.substring(6,10);
var mois = idCard18.substring(10,12);
var jour = idCard18.substring); ( 12,14);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
// Utilisez getFullYear() ici pour obtenir l'année afin d'éviter le problème de l'an 2000
if (temp_date.getFullYear()!=parseFloat(year)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)) {
return false;
}else{
return true;
}
}
/**
* Vérifiez si l'anniversaire indiqué dans le numéro de carte d'identité à 15 chiffres est un anniversaire valide
* @param idCard15 Chaîne de carte d'identité à 15 chiffres
* @return
*/
function isValidityBrithBy15IdCard(idCard15){
var année = idCard15.substring(6,8);
var mois = idCard15.substring(8,10);
var jour = idCard15.substring(10,12);
var temp_date = new Date (year, parseFloat(month)-1,parseFloat(day));
// Pour votre âge sur l'ancienne carte d'identité, il n'est pas nécessaire de considérer le problème de l'an 2000 et d'utiliser la méthode getYear()
if (temp_date.getYear()! =parseFloat(année)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)){
return false;
}else{
return true
}
}
//Supprimer les espaces de début et de fin dans la chaîne
function trim(str) {
return str.replace(/(^s* )|(s*$)/g, ""
}
Version deux mise à jour
fonction checkIdcard( num)
{
num = num.toUpperCase();
//Le numéro d'identification est composé de 15 ou 18 chiffres. Lorsqu'il est composé de 15 chiffres, ce sont tous des chiffres. sont des nombres. Le dernier chiffre est un bit de contrôle, qui peut être un nombre ou le caractère X.
if (!(/(^d{15}$)|(^d{17}([0-9]|X)$)/.test(num)))
{
/ /alert('La longueur du numéro d'identification saisi est incorrecte ou le numéro n'est pas conforme à la réglementation !
Le numéro à 15 chiffres doit être composé uniquement de chiffres et le dernier chiffre du numéro à 18 chiffres peut être un nombre ou un X. ');
return false
}
//Le chiffre de contrôle est généré conformément aux réglementations de la norme ISO 7064:1983.MOD 11-2, et X peut être considéré comme le nombre 10.
//Ce qui suit analyse respectivement la date de naissance et le chiffre de contrôle
var len, re
len = num.length
if (len == 15)
{
re = new RegExp(/^(d{6})(d{2})(d{2})(d{2})(d{3})$/
var arrSplit = num.match (re );
//Vérifiez si la date d'anniversaire est correcte
var dtmBirth = new Date('19' arrSplit[2] '/' arrSplit[3] '/' arrSplit[4]) ;
var bGoodDay;
bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && ( dtmBirth.getDate( ) == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert('La date de naissance dans le numéro d'identification saisi est incorrecte !') ;
return false
}
else
{
//Convertir la carte d'identité à 15 chiffres en 18 chiffres
//Le chiffre de contrôle est généré conformément à la norme ISO 7064. :1983.MOD 11-2, X Considérez-le comme le nombre 10.
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = nouveau tableau('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); >var nTemp = 0, i;
num = num.substr(0, 6) '19' num.substr(6, num.length - 6);
for(i = 0; i < 17); ; i )
{
nTemp = num.substr(i, 1) * arrInt[i];
num = arrCh[nTemp % 11]; >}
}
if (len == 18)
{
re = new RegExp(/^(d{6})(d{4})(d{2})(d {2})(d{3})([0-9]|X)$/);
var arrSplit = num.match(re);
//Vérifiez si la date d'anniversaire est correct
var dtmBirth = new Date(arrSplit[2] "/" arrSplit[3] "/" arrSplit[4]);
var bGoodDay
bGoodDay = (dtmBirth.getFullYear() == Number (arrSplit [2])) && ((dtmBirth.getMonth() 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); !bGoodDay )
{
//alert(dtmBirth.getYear());
//alert(arrSplit[2]); le numéro est incorrect ! ');
return false;
}
else
{
//Vérifiez si le code de contrôle de la carte d'identité à 18 chiffres est correct.
//Le chiffre de contrôle est généré conformément aux réglementations ISO 7064:1983.MOD 11-2, et X peut être considéré comme le nombre 10.
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = nouveau tableau('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', ' 2');
var nTemp = 0, i;
for(i = 0; i < 17; i )
{
nTemp = num.substr(i, 1) * arrInt[ i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
//alert('18 bit Le code de vérification de la carte d'identité est incorrect ! Il doit être : 'valnum);
return false
return true; >}