Cómo filtrar números de identificación usando expresiones regulares
En resumen
Al realizar la verificación del nombre real de los usuarios, a menudo se utilizan expresiones regulares y esquemas de verificación para números de identificación. Este artículo enumera dos esquemas de verificación. Puede elegir el esquema apropiado según la situación real de su proyecto.
Descripción del número de identificación
El título correcto y formal del número de identificación de residente debe ser "Número de Identidad de Ciudadano". Según la norma nacional de la República Popular China GB 11643-1999, el número de identidad de ciudadano es un código combinado característico, que consta de un código corporal de 17 dígitos y un código de verificación digital. El orden de izquierda a derecha es: código de dirección de seis dígitos, código de fecha de nacimiento de ocho dígitos, código de serie de tres dígitos y código de verificación de un dígito.
Tomemos como ejemplo el número de identificación de una mujer en el distrito de Chaoyang, Beijing. El significado del número de identificación se muestra en la siguiente figura:
Nota: el número de identificación proviene de GB 11643-1999.
Permítanos completar un proceso completo de verificación de número de identificación desde cero.
Opción 1 (simple)
1.1 Reglas de división
1.1.1 Reglas del código de dirección: La longitud del código de dirección es de 6 dígitos.
Empieza con los números 1-9.
Los últimos cinco números son números del 0 al 9.
De acuerdo con las reglas anteriores, escriba la expresión regular del código de dirección:/[1-9] \ d {5}/
1.1.2 Reglas del código de año: El año El código tiene 4 bits largos.
Empieza con los números 18, 19 o 20.
Los dos dígitos restantes son del 0 al 9.
De acuerdo con las reglas anteriores, escriba la expresión regular de codificación del año: /(18|19|20)\d{2}/. Si no necesita un año que comience con 18, puede eliminar 18.
1.1.3 Reglas del código de mes:
El código de mes es de 2 dígitos.
El primer dígito es 0 y el segundo dígito es 1-9.
O el primer dígito es 1 y el segundo dígito es 0-2.
De acuerdo con las reglas anteriores, escriba la expresión regular del código del mes: /((0[1-9])|(1[0-2])/.
1.1 .4 Reglas del código de fecha:
El código de fecha es de 2 dígitos
El primer dígito es 0-2 y el segundo dígito es 1-9. 30, 31.
De acuerdo con las reglas anteriores, escriba la expresión regular del código de fecha: /(([0-2][1-9])| 10 | 20 | 30 | 31)/
1.1.5 Reglas del código de serie:
El código de serie tiene 3 dígitos.
El código de serie es un número.
< p. > De acuerdo con las reglas anteriores, escriba la expresión regular del código de secuencia:/\d{3}/1.1.6 Reglas del código de verificación:
La longitud del código de verificación es 1 dígito
Puede ser un número, la letra X o la letra X.
Según las reglas anteriores, escriba la expresión regular del código de verificación: /. [0-9Xx]. /.
1.2 Esquema 1 Expresión regular
Basado en las seis reglas anteriores, la expresión regular completa y el programa de prueba son los siguientes:
var p = / ^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(( [0-2][ 1-9])|10|20|30|31)\d{3}[0-9xx]$/;
//Salida verdadera
console . log(p . test(" 11010519491231002 x "));
//La salida false no puede comenzar con 0.
console . x "));
p>
//El año falso de salida no puede comenzar con 17.
console . log(p . test(" 11010517491231002 x "));
//El mes falso de salida no puede ser 13.
console . log(p . test(" 11010519491331002 x "));
//La fecha falsa de salida no puede ser 32.
console . log(p . test(" 11010519491232002 x "));
//La salida no puede terminar en falso.
console . log(p . test(" 11010519491232002 a ")); 1.3 Análisis de la solución
La opción 1 solo hace un juicio de formato básico y tiene tres deficiencias principales:
p>
La determinación del código de dirección no es lo suficientemente precisa. Ejemplo: No hay regiones que comiencen con 16 o 26 en China, pero se puede determinar verificando la fecha que no es lo suficientemente precisa. Ejemplo: 19490231 también se puede verificar, pero no hay un código de paridad 31 en febrero. Se calcula utilizando un código de ontología de 17 bits. El esquema 1 no verifica este código.
Ante las deficiencias del Plan 1, se introduce el Plan 2 para mejorar las deficiencias del Plan 1.
2.1 Verificación del código de dirección provincial
Norte de China: Beijing 11, Tianjin 12, Hebei 13, Shanxi 14, Mongolia Interior 15.
Noreste de China: Liaoning 21, Jilin 22, Heilongjiang 23
Este de China: Shanghai 31, Jiangsu 32, Zhejiang 33, Anhui 34, Fujian 35, Jiangxi 36, Shandong 37.
China central: Henan 41, Hubei 42, Hunan 43
Sur de China: Guangdong 44, Guangxi 45, Hainan 46
Sudoeste de China: Sichuan 51, Guizhou 52, Yunnan 53, Tíbet 54, Chongqing 50.
Noroeste: Shaanxi 61, Gansu 62, Qinghai 63, Ningxia 64, Xinjiang 65.
Especial: Provincia de Taiwán 71, Hong Kong 81, Macao 82
Según el código de dirección anterior, los primeros dos dígitos del número de identificación se verifican para mejorar aún más la precisión. El código de dirección actual se basa en la versión 2013 del código de división administrativa GB/T2260. Debido a la evolución histórica de los códigos de zonificación, no se pueden verificar los últimos cuatro dígitos del código de dirección. Tomemos como ejemplo el número de identificación de Sanpang. Mi número comienza con 2321, pero este código no está en la tabla de códigos de división administrativa actual. Por lo tanto, este artículo sólo examina los dos primeros códigos de dirección provinciales.
También se dice que 91 comienza con los dos primeros dígitos del número de identificación chino obtenido por los extranjeros, pero no he recibido confirmación. Si tiene una tarjeta de identificación que comienza con 91 o conoce Marbury, ayude a confirmar la información relevante.
Con base en el análisis anterior, los procedimientos de verificación y prueba para los códigos de dirección provinciales son los siguientes:
var checkProv = función (val) {
var modo = /^[1 -9][0-9]/;
Var provs = {11:"Pekín", 12:"Tianjin", 13:"Hebei", 14:"Shanxi", 15: "Mongolia Interior", 265433. 33: "Zhejiang", 34: "Anhui", 35: "Fujian", 36: "Jiangxi", 37: "Shandong", 41: "Henan", 42: "Hubei" , 43: "Hunan", 44: "Guangdong", 44. 61: "Shaanxi", 62: "Gansu", 63: "Qinghai", 64: "Ningxia", 65: "Xinjiang", 71: "Provincia de Taiwán ", 81: "Hong Kong", 82: "Macao".
if(pattern.test(val)) {
if(provs[val]) {
Devuelve verdadero
}
}
Devuelve falso
}
//Salida verdadera, 37 es Shandong.
console . log(check prov(37));
//Salida falsa, 16 no existe.
console . log(check prov(16)); 2.2 Verificación del código de fecha de nacimiento
No explica la verificación del código de fecha de nacimiento, pero proporciona directamente las siguientes funciones y pruebas. pasos:
var checkDate = function (val) {
var mode = /^(18|19|20)\d{2}((0[1-9]) |(1[0 -2]))(([0-2][1-9])|10|20|30|31)$/;
if(pattern.test(val) ) {
var año = val.substring(0, 4);
var mes = val.substring(4, 6);
var fecha = val.substring(6, 8);
var fecha2 = nueva fecha (año+"-"+mes+"-"+fecha);
if (fecha& amp& ampdate 2. getmonth () = =(parse int(mes)-1)){
Devuelve verdadero
}
}
Devuelve falso< /p >
}
//Salida verdadera
console . log(checkDate(" 20180212 "));
//Salida falsa Hay no 31 en el cielo de febrero.
console . log(checkDate(" 20180231 ")); 2.3 Verificación del código de verificación
El cálculo del código de verificación es un poco complicado. Primero se proporciona la siguiente fórmula:
donde ai representa el valor I-ésimo del código del cuerpo de la tarjeta de identificación y Wi representa el valor I-ésimo del factor de ponderación.
Tabla de coeficientes de ponderación 1:
I 12345678 wi 791058421910113141414151565438.
Tome el módulo 11 para obtener el valor X.
Busque la tabla 2 según el valor de x y obtenga a18, que es el valor del código de verificación.
Comprueba el código de cálculo del programa y prueba, mira el siguiente código:
var checkCode = function (val) {
var p = /^[1-9] \d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])| 10|20|30|31)\d{3}[0-9xx]$/;
factor var = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var paridad = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
código var = val . substring(17);
if(p.test(val)) {
var suma = 0;
for(var I = 0;i<17;i++) {
suma+= val[I]* factor[I];
}
if(paridad[suma % 11]= = código. toupper case()){
Devuelve verdadero
}
}
Devuelve falso
}
// Salida verdadera, el código de verificación coincide.
console . log(checkCode(" 11010519491231002 x "));
// Salida falsa, el código de verificación no coincide.
console . log(checkCode(" 110105194912310021 ")); 2.4 Código general del Plan 2
var checkID = function (val) {
if(checkCode( val)) {
var fecha = val.substring(6,14);
if(verificar fecha(fecha)){
if(checkProv( val.substring(0, 2))) {
Devuelve verdadero
}
}
}
Devuelve falso
}
//Salida verdadera
console .checkID(" 11010519491231002 x ")); /Salida falsa, el código de verificación no coincide.
console . log(checkID(" 110105194912310021 "));
//Salida falsa, el código de fecha no coincide.
console . log(checkID(" 110105194902310026 "));
//Salida falsa, el código de área no coincide.
console . log(checkID(" 160105194912310029 ")); creo que después de leer este caso, dominas el método. Para obtener contenido más interesante, preste atención a otros artículos relacionados en Gxl.
Lectura recomendada:
Vue.js personaliza la forma en que los eventos ingresan al formulario.
¿Cómo permite Vue.js arrastrar imágenes libremente?
¿Cómo utilizar vue2.0axios para renderizado entre dominios?