Das Folgende ist der Gültigkeitsprüfungscode, der JS gemäß den ID -Nummerncodierungsregeln verwendet.
Der Code von IdCard-Validate.js lautet wie folgt:
Die Codekopie lautet wie folgt:
/**
* 15-Bit-Codierungsregeln für ID-Karte: dddddd yymmdd xx p
* DDDDDD: Regionalcode
* yymmdd: Geburtsdatum
* xx: Sequentielle Klassencodierung, kann nicht bestimmt werden
* P: Geschlecht, ungerade Zahlen sind männlich, sogar Zahlen sind weiblich
* <p />
* 18-Bit-Codierungsregeln für ID-Karte: dddddd yyyymmdd xxx y
* DDDDDD: Regionalcode
* yyyymmdd: Geburtsdatum
* xxx: Sequenztyp -Codierung, kann nicht bestimmt werden, ungerade Zahlen sind Männer, sogar Zahlen sind Frauen
* Y: Überprüfen Sie den Code, der Wert dieser Ziffer kann über die ersten 17 Ziffern erhalten werden
* <p />
* Der Gewichtungsfaktor der 18-stelligen Zahl ist (von rechts nach links) WI = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Überprüfungsbit y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Berechnungsformel für das Scheckbit: y_p = mod (∑ (ai × wi), 11)
* I ist die 2 ... 18 Ziffern der ID -Nummer von rechts nach links;
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // Gewichtungsfaktor
var validEcode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // der ID -Kartenüberprüfungsbitwert.10 repräsentiert x
Funktion IDCARDVALATE (IDCARD) {
idcard = trim (idCard.replace ( / / g, ""));
if (idcard.length == 15) {
return isvalicityBritHby15IDCard (idCard);
} else if (idcard.length == 18) {
var a_idcard = idcard.split (""); // Holen Sie sich das ID -Karten -Array
if (isvalicityBrithby18IDCard (IDCARD) && isTruevalidateCodeBy18IDCard (a_idcard)) {
zurückkehren;
}anders {
false zurückgeben;
}
} anders {
false zurückgeben;
}
}
/**
* Bestimmen Sie, ob das letzte Überprüfungsbit korrekt ist, wenn die ID -Nummer 18 Ziffern beträgt
* @param a_idcard id number Array
* @zurückkehren
*/
Funktion iStruevalidateCodeby18IDCard (a_idcard) {
var sum = 0;
if (a_idcard [17] .tolowerCase () == 'x') {
a_idcard [17] = 10; // Ersetzen Sie den Bestätigungscode durch das letzte Bit X mit 10 für nachfolgende Operationen
}
für (var i = 0; i <17; i ++) {
sum += wi [i] * a_idcard [i]; // gewichtete Summe
}
Valcodeposition = sum % 11; // wo den Verifizierungscode abgerufen werden soll
if (a_idcard [17] == validEcode [valcodeposition]) {
zurückkehren;
} anders {
false zurückgeben;
}
}
/**
*Beurteilen Sie, ob es sich um einen Mann oder eine Frau über ID -Karte handelt
* @param idcard 15/18-stellige ID-Nummer
* @return 'weiblich' female, 'männlich' männlich
*/
Funktion maleorfemalbyIdcard (idCard) {
IDCARD = TRIM (IDCARD.REPLACE (// G, "")); // Verarbeiten Sie die ID -Nummer. Einschließlich Räume zwischen Charakteren.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
zurück "weiblich";
}anders{
zurück "männlich";
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
zurück "weiblich";
}anders{
zurück "männlich";
}
}anders{
null zurückkehren;
}
// Eingehende Zeichen können direkt als Array verarbeitet werden
// if (idcard.length == 15) {
// alarm (idCard [13]);
// if (idCard [13]%2 == 0) {
// zurück "weiblich ';
// }anders{
// 'männlich' zurückkehren;
//}
//} else if (idcard.length == 18) {
// alarm (idCard [16]);
// if (idCard [16]%2 == 0) {
// zurück "weiblich ';
// }anders{
// 'männlich' zurückkehren;
//}
// }anders{
// null zurückgeben;
//}
}
/**
* Überprüfen Sie, ob der Geburtstag in der 18-stelligen ID-Nummer ein gültiger Geburtstag ist
* @param idcard 18-Bit-Buch-ID-Zeichenfolge
* @zurückkehren
*/
Funktion isvalicityBritHby18IDCard (IDCARD18) {
var Jahr = idCard18.substring (6,10);
var monat = idCard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = neues Datum (Jahr, Parsefloat (Monat) -1, Parsefloat (Tag));
// hier Getrieberei () verwenden, um das Jahr zu erhalten, um das Problem der Millennium -Insekten zu vermeiden
if (temp_date.getingfullyear ()! = Parsefloat (Jahr)
|| temp_date.getMonth ()! = Parsefloat (Monat) -1
|| temp_date.getDate ()! = Parsefloat (Tag)) {
false zurückgeben;
}anders{
zurückkehren;
}
}
/**
* Überprüfen Sie, ob der Geburtstag in der 15-stelligen ID-Nummer ein gültiger Geburtstag ist
* @param idcard15 15-Bit-Buch-ID-Zeichenfolge
* @zurückkehren
*/
Funktion isvalicityBritHby15IDCard (IDCARD15) {
var Jahr = IDCARD15.Substring (6,8);
var monat = idCard15.Substring (8,10);
var day = idCard15.Substring (10,12);
var temp_date = neues Datum (Jahr, Parsefloat (Monat) -1, Parsefloat (Tag));
// Für Ihr Alter in Ihrer alten ID -Karte müssen Sie das Problem des Millennium -Wurms nicht berücksichtigen und die Getyear () -Methode verwenden
if (temp_date.getyear ()! = parsefloat (Jahr)
|| temp_date.getMonth ()! = Parsefloat (Monat) -1
|| temp_date.getDate ()! = Parsefloat (Tag)) {
false zurückgeben;
}anders{
zurückkehren;
}
}
// Entfernen Sie die Kettenkopf- und Schwanzräume
Funktion trim (str) {
return Str.Replace (/(^/s*) | (/s*$)/g, "");
}
Version 2 aktualisiert
Die Codekopie lautet wie folgt:
Funktion checkidcard (num)
{
num = num.touppercase ();
// Die ID -Kartennummer beträgt 15 oder 18 Ziffern.
if (! (/(^/d {15} $) | (^/d {17} ([0-9] | x) $)/. Test (num))))
{
// alarm ('Die Länge der eingegebenen ID-Nummer ist falsch, oder die Nummer entspricht nicht den Anforderungen! /N15-Digit-Nummern sollten alle Zahlen sein, und die letzte 18-stellige Nummer kann Nummern oder X sein.');
false zurückgeben;
}
// Das Scheckbit wird gemäß den Bestimmungen von ISO 7064: 1983 erzeugt. MOD 11-2, und X kann als Nummer 10 angesehen werden.
// Die folgenden Analysen des Geburtsdatums bzw. die Überprüfung der Ziffern
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);
// Überprüfen Sie, ob das Geburtstagsdatum korrekt ist
var dtmbirth = neues Datum ('19 ' + arrSplit [2] +'/' + arrSplit [3] +'/' + arrSplit [4]);
var bgoodday;
BGoodday = (dtmbirth.getyear () == nummer (arrSplit [2]))) && ((dtmbirth.getMonth () + 1) == Nummer (arrSplit [3])) && (dtmbirth.getDate () == n Umber (arrSplit [4]));
if (! Bgoodday)
{
// alarm ('das Geburtsdatum in der eingegebenen ID -Nummer ist falsch!');
false zurückgeben;
}
anders
{
// Die 15-stellige ID-Karte auf 18-stellige Konvertierung konvertieren
// Das Scheckbit wird gemäß den Bestimmungen von ISO 7064: 1983 erzeugt. MOD 11-2, und X kann als Nummer 10 angesehen werden.
var arrint = neuarray (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);
für (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
num += arrch [ntemp % 11];
zurückkehren;
}
}
if (len == 18)
{
re = new Regexp (/^(/d {6}) (/d {4}) (/d {2}) (/d {2}) (/d {3}) ([0-9] | x ) $/);
var arrSplit = num.match (re);
// Überprüfen Sie, ob das Geburtstagsdatum korrekt ist
var dtmbirth = neues Datum (arrSplit [2] + "/" + arrSplit [3] + "/" + arrSplit [4]);
var bgoodday;
BGoodday = (dtmbirth.getingfullyear () == Nummer (arrSplit [2])) && ((dtmbirth.getMonth () + 1) == Nummer (arrSplit [3])) && (dtmbirth.getDate () == Nummer (Nummer (Nummer (Nummer arrSplit [4]));
if (! Bgoodday)
{
// alarm (dtmbirth.getyear ());
// alarm (arrSplit [2]);
// alarm ('das Geburtsdatum in der eingegebenen ID -Nummer ist falsch!');
false zurückgeben;
}
anders
{
// Überprüfen Sie, ob der Überprüfungscode der 18-stelligen ID-Karte korrekt ist.
// Das Scheckbit wird gemäß den Bestimmungen von ISO 7064: 1983 erzeugt. MOD 11-2, und X kann als Nummer 10 angesehen werden.
var valnum;
var arrint = neuarray (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;
für (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * arrint [i];
}
Valnum = arrch [ntemp % 11];
if (valnum! = num.substr (17, 1))
{
// alarm ('Der Verifizierungscode der 18-Bit-ID-Karte ist falsch! Es sollte:' + Valnum);
false zurückgeben;
}
zurückkehren;
}
}
false zurückgeben;
}