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:
Copiar código del código de la siguiente manera:
/**
* 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'-mule '
*/
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, "");
}
Para el código anterior, en el uso real del género, primero puede determinar si la tarjeta de identificación es válida. Este tipo de juicio no se realiza en este ejemplo de código, y se siente un poco inútil y se puede enriquecer completamente de acuerdo con la situación en uso real.