Ce qui suit est le code de vérification de validité utilisant JS selon les règles de codage du numéro d'identification.
Le code idcard-validate.js est le suivant:
La copie de code est la suivante:
/ **
* Règles de codage 15 bits pour la carte d'identité: dddddd yymmdd xx p
* DDDDDD: code régional
* yymmdd: date de naissance
* xx: codage de classe séquentiel, ne peut pas être déterminé
* P: le sexe, les nombres impairs sont des hommes, même les nombres sont des femmes
* <p />
* Règles de codage 18 bits pour la carte d'identité: dddddd yyyymmdd xxx y
* DDDDDD: code régional
* yyyymmdd: date de naissance
* xxx: codage de type de séquence, ne peut pas être déterminé, les nombres impairs sont des hommes, même les nombres sont des femmes
* y: cocher le code, la valeur de ce chiffre peut être obtenue à travers les 17 premiers chiffres
* <p />
* Le facteur de pondération du nombre à 18 chiffres est (droit à gauche) wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Bit de vérification y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Formule de calcul pour le bit de contrôle: y_p = mod (∑ (ai × wi), 11)
* I est les 2 ... 18 chiffres du numéro d'identification de droite à gauche;
*
* /
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]; // La valeur du bit de vérification de la carte d'identité.10 représente x
fonction idcardValidate (idcard) {
idcard = trim (idcard.replace (/ / g, ""));
if (idcard.length == 15) {
return isValidityBrithBy15IdCard (idcard);
} else if (idcard.length == 18) {
var a_idcard = idcard.split (""); // Obtenez le tableau de carte d'identité
if (isValidityBrithBy18idCard (idcard) && isTrueValidateCodeBy18idCard (a_idcard)) {
Retour Vrai;
}autre {
retourne false;
}
} autre {
retourne false;
}
}
/ **
* Déterminez si le dernier bit de vérification est correct lorsque le numéro d'identification est de 18 chiffres
* @param a_idcard
* @retour
* /
fonction isTrueValidateCodeBy18idCard (a_idcard) {
var sum = 0; // Déclarer la variable de somme pondérée
if (a_idcard [17] .tolowercase () == 'x') {
a_idcard [17] = 10; // Remplacez le code de vérification par le dernier bit x avec 10 pour les opérations suivantes
}
pour (var i = 0; i <17; i ++) {
sum + = wi [i] * a_idcard [i]; // somme pondérée
}
valcodepositif = sum% 11; // où obtenir le code de vérification
if (a_idcard [17] == validecode [valcodepositif]) {
Retour Vrai;
} autre {
retourne false;
}
}
/ **
* Jugez que ce soit un homme ou une femme par carte d'identité
* @param idcard
* @return 'féminin-feme'-male
* /
fonction maleorfemalbyidcard (idcard) {
idcard = trim (idcard.replace (/ / g, "")); // traite le numéro d'identification. Y compris les espaces entre les personnages.
if (idcard.length == 15) {
if (idcard.substring (14,15)% 2 == 0) {
retour «femelle»;
}autre{
retour «mâle»;
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)% 2 == 0) {
retour «femelle»;
}autre{
retour «mâle»;
}
}autre{
retourner null;
}
// Les caractères entrants peuvent être traités directement comme un tableau
// if (idcard.length == 15) {
// alerte (idcard [13]);
// if (idcard [13]% 2 == 0) {
// retourne «femelle»;
// }autre{
// retourne «mâle»;
//}
//} else if (idcard.length == 18) {
// alerte (idcard [16]);
// if (idcard [16]% 2 == 0) {
// retourne «femelle»;
// }autre{
// retourne «mâle»;
//}
// }autre{
// retourne null;
//}
}
/ **
* Vérifiez si l'anniversaire du numéro d'identification à 18 chiffres est un anniversaire valide
* @param idcard 18 bits de livre d'identifiant de livre
* @retour
* /
fonction isValidityBrithBy18idCard (idcard18) {
var année = idcard18.substring (6,10);
var mois = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = new Date (année, parsefloat (mois) -1, parsefloat (jour));
// Utilisez Gettillyear () ici pour obtenir l'année pour éviter le problème des insectes du millénaire
if (temp_date.getlyar ()! = paSefloat (année)
|| temp_date.getmonth ()! = parsefloat (mois) -1
|| temp_date.getDate ()! = paSefloat (jour)) {
retourne false;
}autre{
Retour Vrai;
}
}
/ **
* Vérifiez si l'anniversaire dans le numéro d'identification à 15 chiffres est un anniversaire valide
* @param idcard15 chaîne d'ID de livre 15 bits
* @retour
* /
fonction isValidityBrithBy15IdCard (idcard15) {
var année = idcard15.Substring (6,8);
var mois = idcard15.Substring (8,10);
var day = idcard15.Substring (10,12);
var temp_date = new Date (année, parsefloat (mois) -1, parsefloat (jour));
// Pour votre âge dans votre ancienne carte d'identité, vous n'avez pas besoin de considérer le problème de Millennium Worm et d'utiliser la méthode Getyear ()
if (temp_date.getyear ()! = parsefloat (année)
|| temp_date.getmonth ()! = parsefloat (mois) -1
|| temp_date.getDate ()! = paSefloat (jour)) {
retourne false;
}autre{
Retour Vrai;
}
}
// Retirez les espaces de tête et de queue de chaîne
Fonction Trim (str) {
return str.replace (/ (^ / s *) | (/ s * $) / g, "");
}
Version mise à jour 2
La copie de code est la suivante:
Fonction CheckIdCard (NUM)
{
num = num.touppercase ();
// Le numéro de carte d'identité est de 15 ou 18 chiffres.
if (! (/ (^ / d {15} $) | (^ / d {17} ([0-9] | x) $) /. test (num))))
{
// alerte ('La longueur du numéro d'identification entré est incorrecte, ou le nombre ne répond pas aux exigences! / N15-Digit Les nombres doivent être des nombres, et le dernier numéro à 18 chiffres peut être des nombres ou X.');
retourne false;
}
// Le bit de contrôle est généré en fonction des dispositions de l'ISO 7064: 1983.mod 11-2, et X peut être considéré comme le numéro 10.
// Les analyses suivantes analysent respectivement la date de naissance et de vérifier les chiffres
var len, re;
len = num.length;
if (len == 15)
{
re = new regexp (/ ^ (/ d {6}) (/ d {2}) (/ 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 () == nombre (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == Number (Arrsplit [3])) && (dtmbirth.getDate () == n Umber (Arrsplit [4]));
si (! bgoodday)
{
// alerte («La date de naissance dans le numéro d'identification entrée est incorrecte!»);
retourne false;
}
autre
{
// Convertir la carte d'identité à 15 chiffres en 18 chiffres
// Le bit de contrôle est généré en fonction des dispositions de l'ISO 7064: 1983.mod 11-2, et X peut être considéré comme le numéro 10.
Var Arrint = Nouveau tableau (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = new Array ('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);
pour (i = 0; i <17; i ++)
{
ntemp + = num.substr (i, 1) * Arrint [i];
}
num + = arrch [ntemp% 11];
Retour Vrai;
}
}
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 correcte
var dtmbirth = new Date (arrsplit [2] + "/" + arrsplit [3] + "/" + arrsplit [4]);
var bgoodday;
bgoodday = (dtMbirth.getlyear () == nombre (arrsplit [2])) && ((dtmbirth.getMonth () + 1) == Number (Arrsplit [3])) && (dtmbirth.getDate () == Number (Number (Number ( ArrSplit [4]));
si (! bgoodday)
{
// alert (dtmbirth.getyear ());
// alerte (Arrsplit [2]);
// alerte («La date de naissance dans le numéro d'identification entrée est incorrecte!»);
retourne false;
}
autre
{
// Vérifiez si le code de vérification de la carte d'identité à 18 chiffres est correct.
// Le bit de contrôle est généré en fonction des dispositions de l'ISO 7064: 1983.mod 11-2, et X peut être considéré comme le numéro 10.
var valnum;
Var Arrint = Nouveau tableau (7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrch = new Array ('1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2') ;
var ntemp = 0, i;
pour (i = 0; i <17; i ++)
{
ntemp + = num.substr (i, 1) * Arrint [i];
}
Valnum = Arrch [ntemp% 11];
if (Valnum! = num.substr (17, 1))
{
// alerte ('Le code de vérification de la carte d'identité 18 bits est incorrect! Il devrait être:' + Valnum);
retourne false;
}
Retour Vrai;
}
}
retourne false;
}