El generador y validador de Nino (número de seguro nacional del Reino Unido). Genera y valida los números de NI del Reino Unido a las especificaciones NIM39110 en Gov.uk.
test-nino
es un rendimiento centrado y tiene cero dependencias. Los puntos de referencia hablan por sí mismos.
Empezando
Instalar
Importar
Funciones disponibles
aleatorio
incremental
validar
normalizar
Puntos de referencia
¿Cuál es un número de seguro nacional válido del Reino Unido?
¿Cuántos números de seguro nacional válidos del Reino Unido hay?
Puede instalar el paquete Test-Nino desde NPM:
npm i test-nino
// esm/typescriptemport * como testnino de 'test-nino'; // comunesjsconst testnino = request ('test-nino'); // denoimport * como testnino de "https://deno.land/x/test_nino@vx .Xx/mod.ts ";
Se usa para generar un Nino aleatorio:
const nino = testNino.random (); // Devuelve un número de seguro nacional válido del Reino Unido, por ejemplo, AA000000A
ADVERTENCIA: No se garantiza que no pueda generar el mismo Niño más de una vez utilizando este método. Si necesita un Nino único cada vez, le sugiero que use el generador incremental.
Este método es mejor si desea asegurarse de no generar un nino duplicado. Esta función utiliza un generador JavaScript para enumerar a través de todos los números NI del Reino Unido posibles AA000000A-ZY999999D
(hay 1,492,000,000 en total).
El generador enumerará en prefijo, número y luego sufijo.
// Cree un generador Instanceconst uniquenigenerator = testNino.Incremental (); para (let i = 0; i <= 10000000; i ++) {uniquenigenerator.next () // devuelve la siguiente instancia del generador // en la 1 iteración it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it it It devolverá {valor: 'aa00000000a', hecho: falso} // en la segunda iteración devolverá {valor: 'aa000000b', hecho: falso} // ... // en la iteración 10000000 devolverá {valor: 'AC500000A', HECHO: FALSO}}
La propiedad
done
solo devolverátrue
una vez que todas las combinaciones posibles hayan sido enumeradas.
Esta función validará el nino proporcionado y devolverá un objeto que detalles cuáles han pasado o han fallado.
Se espera que el nino ya no esté en formato, etc.: puede usar
normalise
para preparar el Nino si es necesario.
// un NinotestNino.validate válido ("AB123456C"); // {// reglas: {// type: true, // longitud: true, // prefix: true, // número: true, // verdadero: true: true: true //}, // resultado: true //} // un inválido ninotestnino.validate (1); // {// reglas: {// type: false, //}, // resultado: falso //}
El objeto devuelto siempre tendrá una propiedad
outcome
, pero la función falla rápidamente y, por lo tanto, solo devolverá un resultado para cada elemento probado del Niño.
Esta función normalizará a Ninos, despojando el espacio en blanco y convertirla en caracteres mayúsculas.
testNino.normalise ('AA 00 00 00 A') // AA00000000000000000000000000000000000000
Esto se puede usar como cebador para la función
validate
Todos los puntos de referencia se ejecutan usando Benchmark.js en el nodo V18.16.0. Las importaciones de CommonJS se utilizan para todos los paquetes para mantener las cosas justas. Puede ejecutar los puntos de referencia desde la carpeta de benchmarks
. Los resultados se han redondeado a 3 cifras significativas para suavizar las variaciones entre las ejecuciones y proporcionar resultados más comparables.
test-nino
es más de 2.6 veces más rápido que el siguiente generador de números NI aleatorios más rápido:
paquete | versión | OPS/SEC |
---|---|---|
falso | 0.0.1 | 5,810,000 |
random_uk_nino | 1.0.3 | 6,340,000 |
generador de avris | 0.8.2 | 2,900,000 |
nino | el último | 17,000,000 |
Otros paquetes usan bucles que pasan por el proceso de
Generate random NINO > is it valid? > no > repeat
, hasta que se administre un nino válido. Esto cuesta un precioso tiempo de CPU y bloquea el bucle de eventos de nodo.test-nino
se hace diferente y, en cambio, almacena la lista completa de prefijos válidos que luego se eligen al azar. No hay bucles dan como resultado un rendimiento constante que no está garantizado con otros paquetes.
test-nino
es más de 14 veces más rápido que la siguiente función de validar más rápida al validar un Nino válido:
paquete | versión | Válido (AA000000A) | inválido (a) | inválido (nulo) | inválido (AAX00000A) | inválido (aa00000xa) |
---|---|---|---|---|---|---|
válido | 1.0.0 | 34,000,000 | 84,600,000 | 64,100,000 | 75,200,000 | 27,000,000 |
número de aseguramiento-nacional | 1.0.0 | 42,800,000 | 1,030,000,000 | 1,030,000,000 | 80,000,000 | 33,000,000 |
generador de avris | 0.8.2 | 4,190,000 | 232,000 (lanzamientos) | 105,000 (lanzamientos) | 230,000 (lanzamientos) | 230,000 (lanzamientos) |
nino | el último | 609,000,000 | 1,030,000,000 | 1,030,000,000 | 1,020,000,000 | 601,000,000 |
La mayoría de los otros paquetes se basan en patrones de regex, la función Validate en
test-nino
utiliza las búsquedas de caracteres indexadas que son mucho más rápidas. La función también falla rápido, lo que significa ganancias aún mayores para escenarios inválidos específicos.
Para citar las reglas en el momento de la implementación de Gov.uk:
Un nino está compuesto por 2 letras, 6 números y un sufijo, que siempre es A, B, C o D.
Se parece a esto: QQ 12 34 56 A
Todos los prefijos son válidos, excepto:
Los caracteres D, F, I, Q, U y V no se usan como la primera o segunda letra de un prefijo de Nino.
La letra O no se usa como la segunda letra de un prefijo.
Los prefijos BG, GB, KN, NK, NT, TN y ZZ no deben usarse
Primero, consideremos las restricciones en las dos primeras letras del prefijo de Niño:
Los caracteres D, F, I, Q, U y V no se usan como la primera o segunda letra del prefijo, por lo que hay 20 opciones posibles para la primera letra (AZ excluyendo D, F, I, Q, U , y v) y 19 posibles opciones para la segunda letra (AZ excluyendo D, F, I, Q, U, V y O).
Los prefijos BG, GB, KN, NK, NT, TN y ZZ no deben usarse, por lo que hay 20 x 19 - 7 = 373 combinaciones posibles de las dos primeras letras.
A continuación, consideremos las restricciones en la carta final, que es el sufijo:
El sufijo solo puede ser A, B, C o D, por lo que hay 4 sufijos posibles.
Finalmente, consideremos los seis números en el Niño:
Cada uno de los seis números puede tener 10 valores posibles (0-9), por lo que hay 10^6 (1 millón) combinaciones posibles de los seis números.
Poner todo esto, el número de posibles ninos únicos sería:
373 (para las dos primeras letras) x 10^6 (para los seis números) x 4 (para la letra final) = 1,492,000,000 posibles Ninos.