El siguiente es el código de verificación de validez utilizando JS de acuerdo con las reglas de codificación del número de identificación.
El código idcard-validate.js es el siguiente:
La copia del código es la siguiente:
/**
* Reglas de codificación de 15 bits para la tarjeta de identificación: dddddd yymmdd xx p
* DDDDDD: Código regional
* yymmdd: fecha de nacimiento
* xx: codificación de clase secuencial no se puede determinar
* P: Género, los números impares son hombres, incluso los números son mujeres
* <p />
* Reglas de codificación de 18 bits para la tarjeta de identificación: dddddd yyyymmdd xxx y
* DDDDDD: Código regional
* aaa yyymmdd: fecha de nacimiento
* xxx: codificación de tipo de secuencia, no se puede determinar, los números impares son hombres, incluso los números son mujeres
* Y: Verifique el código, el valor de este dígito se puede obtener a través de los primeros 17 dígitos
* <p />
* El factor de ponderación del número de 18 dígitos es (derecha a izquierda) wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
* Bit de verificación y = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]
* Fórmula de cálculo para bit de verificación: y_p = mod (∑ (ai × wi), 11)
* I es el 2 ... 18 dígitos del número de identificación de derecha a izquierda;
*
*/
var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // factor de ponderación
var vallecode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // El valor de bit de verificación de la tarjeta de identificación.10 representa x
función idcardvalidate (idcard) {
idcard = trim (idcard.replace ( / / g, ""));
if (idcard.length == 15) {
return isValidityBrithBy15IDCard (Idcard);
} else if (idcard.length == 18) {
var a_idcard = idcard.split (""); // Obtenga la matriz de la tarjeta de identificación
if (isValidityBrithBy18IdCard (idcard) && istruevalidateCodeby18idCard (a_idcard)) {
devolver verdadero;
}demás {
devolver falso;
}
} demás {
devolver falso;
}
}
/**
* Determine si el último bit de verificación es correcto cuando el número de identificación es de 18 dígitos
* @param A_idCard Número de identificación de la matriz
* @devolver
*/
función istruevalidatecodeby18idcard (a_idcard) {
var suma = 0;
if (a_idcard [17] .tolowercase () == 'x') {
a_idcard [17] = 10; // Reemplace el código de verificación con el último bit x con 10 para operaciones posteriores
}
para (var i = 0; i <17; i ++) {
sum += wi [i] * a_idcard [i]; // suma ponderada
}
valcodePosition = sum % 11; // dónde obtener el código de verificación
if (a_idcard [17] == Validecode [valCodePosition]) {
devolver verdadero;
} demás {
devolver falso;
}
}
/**
*Juzga si es un hombre o una mujer a través de la tarjeta de identificación
* @param idcard 15/18 dígitos Número de identificación
* @return 'femenino' femenino ', macho'-male
*/
función MaleorfemalbyidCard (Idcard) {
idcard = trim (idcard.replace (// g, "")); // procesa el número de identificación. Incluyendo espacios entre personajes.
if (idcard.length == 15) {
if (idcard.substring (14,15)%2 == 0) {
regresar 'mujer';
}demás{
regresar 'masculino';
}
} else if (idcard.length == 18) {
if (idcard.substring (14,17)%2 == 0) {
regresar 'mujer';
}demás{
regresar 'masculino';
}
}demás{
regresar nulo;
}
// Los caracteres entrantes se pueden procesar directamente como una matriz
// if (idcard.length == 15) {
// alerta (idcard [13]);
// if (idcard [13]%2 == 0) {
// devolver 'mujer';
// }demás{
// devolver 'masculino';
//}
//} else if (idcard.length == 18) {
// alerta (idcard [16]);
// if (idcard [16]%2 == 0) {
// devolver 'mujer';
// }demás{
// devolver 'masculino';
//}
// }demás{
// devolver nulo;
//}
}
/**
* Verifique si el cumpleaños en el número de identificación de 18 dígitos es un cumpleaños válido
* @param idcard de 18 bits de identificación de libros de 18 bits
* @devolver
*/
función isvaliditybrithby18idcard (idcard18) {
var año = idcard18.substring (6,10);
var mes = idcard18.substring (10,12);
var day = idcard18.substring (12,14);
var temp_date = nueva fecha (año, parsefloat (mes) -1, parsefloat (día));
// use GetFulTyear () aquí para obtener el año para evitar el problema de los errores del milenio
if (temp_date.getblyear ()! = parsefloat (año)
|| temp_date.getmonth ()! = parsefloat (mes) -1
|| temp_date.getDate ()! = parsefloat (día)) {
devolver falso;
}demás{
devolver verdadero;
}
}
/**
* Verifique si el cumpleaños en el número de identificación de 15 dígitos es un cumpleaños válido
* @param idcard15 cadena de identificación de libro de 15 bits
* @devolver
*/
función isvaliditybrithby15idcard (idcard15) {
var año = idcard15.substring (6,8);
var mes = idcard15.substring (8,10);
var day = idcard15.substring (10,12);
var temp_date = nueva fecha (año, parsefloat (mes) -1, parsefloat (día));
// para su edad en su tarjeta de identificación anterior, no necesita considerar el problema del gusano del milenio y usar el método getyear ()
if (temp_date.getyear ()! = parsefloat (año)
|| temp_date.getmonth ()! = parsefloat (mes) -1
|| temp_date.getDate ()! = parsefloat (día)) {
devolver falso;
}demás{
devolver verdadero;
}
}
// Retire los espacios de cabezal y cola
función trim (str) {
return str.replace (/(^/s*) | (/s*$)/g, "");
}
Versión actualizada 2
La copia del código es la siguiente:
función checkidcard (num)
{
num = num.ToUpperCase ();
// El número de tarjeta de identificación es de 15 o 18 dígitos.
if (! (/((^/d {15} $) | (^/d {17} ([0-9] | x) $)/. test (num))))
{
// Alerta ('La longitud del número de identificación ingresada es incorrecta, ¡o el número no cumple con los requisitos! /N15 dígitos, todos deben ser números, y el último número de 18 dígitos puede ser números o X.');
devolver falso;
}
// El bit de verificación se genera de acuerdo con las disposiciones de ISO 7064: 1983.Mod 11-2, y X puede considerarse como el número 10.
// Lo siguiente analiza la fecha de nacimiento y verifica los dígitos respectivamente
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);
// verifique si la fecha de cumpleaños es correcta
var dtmbirth = nueva fecha ('19 ' + arrsplit [2] +'/' + arrsplit [3] +'/' + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getyear () == number (arrsplit [2])) && ((dtmbirth.getmonth () + 1) == number (arrsplit [3])) && (dtmbirth.getDate () == n umber (arrsplit [4]));
if (! bgoodday)
{
// alerta ('La fecha de nacimiento en el número de identificación ingresada es incorrecta!');
devolver falso;
}
demás
{
// convertir la tarjeta de identificación de 15 dígitos a 18 dígitos
// El bit de verificación se genera de acuerdo con las disposiciones de ISO 7064: 1983.Mod 11-2, y X puede considerarse como el número 10.
var arrain = nueva matriz (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);
para (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * Arrint [i];
}
num += arrch [ntemp % 11];
devolver verdadero;
}
}
if (len == 18)
{
re = new Regexp (/^(/D {6}) (/d {4}) (/d {2}) (/d {2}) (/d {3}) ([0-9] | x ) $/);
var arrsplit = num.match (re);
// verifique si la fecha de cumpleaños es correcta
var dtmbirth = nueva fecha (arrsplit [2] + "/" + arrsplit [3] + "/" + arrsplit [4]);
var bgoodday;
bgoodday = (dtmbirth.getblybullyear () == number (arrsplit [2])) && ((dtmbirth.getmonth () + 1) == number (arrsplit [3])) && (dtmbirth.getDate () == Number ( arrsplit [4]));
if (! bgoodday)
{
// alerta (dtmbirth.getyear ());
// alerta (arrsplit [2]);
// alerta ('La fecha de nacimiento en el número de identificación ingresada es incorrecta!');
devolver falso;
}
demás
{
// Verifique si el código de verificación de la tarjeta de identificación de 18 dígitos es correcto.
// El bit de verificación se genera de acuerdo con las disposiciones de ISO 7064: 1983.Mod 11-2, y X puede considerarse como el número 10.
var valnum;
var arrain = nueva matriz (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;
para (i = 0; i <17; i ++)
{
ntemp += num.substr (i, 1) * Arrint [i];
}
valnum = arrch [ntemp % 11];
if (valnum! = num.substr (17, 1))
{
// alerta ('El código de verificación de la tarjeta de identificación de 18 bits es incorrecto! Debería ser:' + valnum);
devolver falso;
}
devolver verdadero;
}
}
devolver falso;
}