Rendemento
A velocidade e o tamaño desta biblioteca en comparación coa súa versión principal anterior e coas demais bibliotecas de npm que validan identificadores españois. Todas as cifras desta páxina lense de bench/results/latest.json ao xerar o sitio: non se escribe nada a man. Se unha biblioteca é máis rápida ou máis pequena nalgunha cousa, as táboas móstrano.
| Máquina | AMD EPYC 9V74 80-Core Processor |
|---|---|
| Núcleos | 4 |
| Memoria | 16 GiB |
| Sistema operativo | linux 6.17.0-1022-azure (x64) |
| Node.js | v24.21.0 |
| Data | 2 de outubro de 2026 |
| Commit medido | 1166241 |
| Método | 3 roldas; cada tarefa, 2.000 ms tras 500 ms de quecemento, no seu propio proceso; a cifra é a da rolda mediana |
As cifras absolutas dependen da máquina. As proporcións entre as bibliotecas dunha mesma execución mantéñense moito mellor dunha máquina a outra, así que compare esas.
Velocidade
Sección titulada «Velocidade»Millóns de validacións por segundo (M ops/s; canto maior sexa a cifra, máis rápida é), con cada biblioteca chamada como indica a súa documentación, coas súas opcións predeterminadas, sobre os mesmos documentos válidos e non válidos en forma canónica. «Rendemento relativo» indica a proporción entre o rendemento desta compilación e o de cada biblioteca, na mesma execución. non compatible significa que a biblioteca non ten validador para ese tipo.
| Biblioteca | M ops/s | Rendemento relativo |
|---|---|---|
| nif-dni-nie-cif-validation esta compilación | — | |
| @maistik/validate-nif 2.0.1 | 6,4× o rendemento | |
| dni-js 1.0.0 | 6,8× o rendemento | |
| nif-dni-nie-cif-validation 1.0.11 | 7,0× o rendemento | |
| better-dni 4.4.2 | 7,1× o rendemento | |
| spain-id 1.1.14 | 8,6× o rendemento | |
| validator.js isIdentityCard(x, "ES") 13.15.35 | 10,5× o rendemento | |
| validator.js isTaxID(x, "es-ES") 13.15.35 | 14,3× o rendemento | |
| @kreyo/nif-validator 0.1.0 | 21,6× o rendemento | |
| jsvat 2.5.4 | 28,6× o rendemento | |
| stdnum 1.12.6 | 146,3× o rendemento |
Ningunha outra biblioteca foi máis rápida co conxunto DNI.
| Biblioteca | M ops/s | Rendemento relativo |
|---|---|---|
| nif-dni-nie-cif-validation esta compilación | — | |
| @maistik/validate-nif 2.0.1 | 6,9× o rendemento | |
| better-dni 4.4.2 | 7,1× o rendemento | |
| nif-dni-nie-cif-validation 1.0.11 | 9,0× o rendemento | |
| dni-js 1.0.0 | 12,8× o rendemento | |
| spain-id 1.1.14 | 14,4× o rendemento | |
| validator.js isTaxID(x, "es-ES") 13.15.35 | 16,8× o rendemento | |
| validator.js isIdentityCard(x, "ES") 13.15.35 | 18,4× o rendemento | |
| @kreyo/nif-validator 0.1.0 | 21,7× o rendemento | |
| jsvat 2.5.4 | 36,2× o rendemento | |
| stdnum 1.12.6 | 146,0× o rendemento |
Ningunha outra biblioteca foi máis rápida co conxunto NIE.
| Biblioteca | M ops/s | Rendemento relativo |
|---|---|---|
| nif-dni-nie-cif-validation esta compilación | — | |
| @maistik/validate-nif 2.0.1 | 7,1× o rendemento | |
| nif-dni-nie-cif-validation 1.0.11 | 7,6× o rendemento | |
| spain-id 1.1.14 | 12,2× o rendemento | |
| @kreyo/nif-validator 0.1.0 | 22,0× o rendemento | |
| jsvat 2.5.4 | 23,2× o rendemento | |
| stdnum 1.12.6 | 146,7× o rendemento | |
| better-dni 4.4.2 | non compatible | non compatible |
| dni-js 1.0.0 | non compatible | non compatible |
| validator.js isIdentityCard(x, "ES") 13.15.35 | non compatible | non compatible |
| validator.js isTaxID(x, "es-ES") 13.15.35 | non compatible | non compatible |
Ningunha outra biblioteca foi máis rápida co conxunto CIF.
A velocidade non o é todo, e estas cifras deixan cousas fóra: a memoria, a primeira chamada antes de que o JIT quente, a entrada que necesita normalización e o custo do resultado detallado de validate(). Unha biblioteca que rexeita axiña unha cadea é rápida con ela, e por iso a concordancia con SPEC.md mídese á parte, máis abaixo.
Tamaño do bundle
Sección titulada «Tamaño do bundle»O que engade un validador a un bundle, minificado e comprimido con gzip (min+gzip; canto menor sexa a cifra, máis pequeno é), empaquetado con esbuild como fai a comprobación de tamaño da propia biblioteca. A barra dunha biblioteca moito máis grande ca as demais debúxase completa, co final cortado.
| Biblioteca | Calquera tipo |
|---|---|
| @maistik/validate-nif 2.0.1 | |
| @kreyo/nif-validator 0.1.0 | |
| spain-id 1.1.14 | |
| dni-js 1.0.0 | |
| nif-dni-nie-cif-validation esta compilación | |
| better-dni 4.4.2 | |
| jsvat 2.5.4 | |
| nif-dni-nie-cif-validation 1.0.11 | |
| validator.js isIdentityCard(x, "ES") 13.15.35 | |
| validator.js isTaxID(x, "es-ES") 13.15.35 | |
| stdnum 1.12.6 |
Máis pequenas ca esta compilación para un validador de calquera tipo: @maistik/validate-nif 2.0.1 (456 B), @kreyo/nif-validator 0.1.0 (533 B), spain-id 1.1.14 (583 B) e dni-js 1.0.0 (882 B). Tamén se mediu stdnum 1.12.6 cunha importación directa do seu módulo do NIF español (non documentada): 2.468 B.
Algunhas bibliotecas máis pequenas validan menos tipos. Esta dedica bytes a normalizar a entrada, aos tipos de control de CIF-3 e aos NIF K/L/M. As bibliotecas publicadas só como CommonJS non admiten tree shaking, así que unha das súas funcións custa a biblioteca enteira. As bibliotecas de moitos países ou de propósito xeral, como stdnum e validator.js, son máis grandes por deseño.
| Biblioteca | DNI | NIE | CIF | Calquera tipo | Biblioteca completa |
|---|---|---|---|---|---|
| @maistik/validate-nif 2.0.1 | 215 B | 243 B | 319 B | 456 B | 1.189 B |
| @kreyo/nif-validator 0.1.0 | 533 B | 533 B | 533 B | 533 B | 746 B |
| spain-id 1.1.14 | 165 B | 237 B | 363 B | 583 B | 704 B |
| dni-js 1.0.0 | 883 B | 882 B | non compatible | 882 B | 880 B |
| nif-dni-nie-cif-validation esta compilación | 623 B | 586 B | 568 B | 929 B | 4.679 B |
| better-dni 4.4.2 | 1.135 B | 1.135 B | non compatible | 1.134 B | 1.132 B |
| jsvat 2.5.4 | 1.186 B | 1.186 B | 1.186 B | 1.186 B | 5.266 B |
| nif-dni-nie-cif-validation 1.0.11 | 1.517 B | 1.517 B | 1.518 B | 1.517 B | 1.514 B |
| validator.js isIdentityCard(x, "ES") 13.15.35 | 2.539 B | 2.539 B | non compatible | 2.539 B | 44.449 B |
| validator.js isTaxID(x, "es-ES") 13.15.35 | 6.537 B | 6.537 B | non compatible | 6.537 B | 44.449 B |
| stdnum 1.12.6 | 51.063 B | 51.063 B | 51.063 B | 51.063 B | 51.054 B |
Concordancia con SPEC.md
Sección titulada «Concordancia con SPEC.md»A porcentaxe dos casos de proba da biblioteca (opcións predeterminadas) que cada biblioteca xulga igual ca SPEC.md: válidos ou non válidos.
| Biblioteca | Todos os casos | Só entrada canónica |
|---|---|---|
| nif-dni-nie-cif-validation esta compilación | ||
| nif-dni-nie-cif-validation 1.0.11 | ||
| spain-id 1.1.14 | ||
| better-dni 4.4.2 | ||
| dni-js 1.0.0 | ||
| stdnum 1.12.6 | ||
| validator.js isIdentityCard(x, "ES") 13.15.35 | ||
| validator.js isTaxID(x, "es-ES") 13.15.35 | ||
| @maistik/validate-nif 2.0.1 | ||
| @kreyo/nif-validator 0.1.0 | ||
| jsvat 2.5.4 |
| Biblioteca | DNI | NIE | CIF | K/L/M | Discrepancias | Por unha decisión documentada |
|---|---|---|---|---|---|---|
| nif-dni-nie-cif-validation esta compilación | 100,0 % | 100,0 % | 100,0 % | 100,0 % | 0 | 0 |
| nif-dni-nie-cif-validation 1.0.11 | 73,3 % | 88,9 % | 83,6 % | 100,0 % | 20 | 13 |
| spain-id 1.1.14 | 90,0 % | 77,8 % | 86,9 % | 36,4 % | 22 | 13 |
| better-dni 4.4.2 | 73,3 % | 77,8 % | non compatible | 45,5 % | 18 | 7 |
| dni-js 1.0.0 | 76,7 % | 77,8 % | non compatible | 45,5 % | 17 | 7 |
| stdnum 1.12.6 | 90,0 % | 83,3 % | 63,9 % | 100,0 % | 29 | 29 |
| validator.js isIdentityCard(x, "ES") 13.15.35 | 80,0 % | 77,8 % | non compatible | 45,5 % | 16 | 6 |
| validator.js isTaxID(x, "es-ES") 13.15.35 | 80,0 % | 77,8 % | non compatible | 100,0 % | 10 | 5 |
| @maistik/validate-nif 2.0.1 | 86,7 % | 77,8 % | 86,9 % | 45,5 % | 22 | 14 |
| @kreyo/nif-validator 0.1.0 | 86,7 % | 77,8 % | 86,9 % | 45,5 % | 22 | 14 |
| jsvat 2.5.4 | 90,0 % | 83,3 % | 82,0 % | 100,0 % | 17 | 17 |
Un tipo que unha biblioteca non valida exclúese das súas cifras, así que compare as columnas, e non «Todos os casos», entre bibliotecas de distinto alcance. A lista de discrepancias de cada biblioteca, cun exemplo de cada unha, está en latest.md (en inglés).
- Entradas. Xéranse cun xerador pseudoaleatorio con semente, así que todas as execucións e todas as máquinas miden as mesmas cadeas: documentos válidos e os mesmos documentos cun carácter de control incorrecto, para cada tipo.
- Chamadas. Cada biblioteca chámase exactamente como indica a súa documentación, coas súas opcións predeterminadas, sobre a cadea de entrada sen procesar. A única excepción é jsvat, un validador de NIF-IVE, a cuxas entradas se lles engade o prefixo
ESfóra do bucle cronometrado. - Medición. tinybench executa cada tarefa no seu propio proceso, tras un quecemento, para que o que V8 aprende dunha biblioteca non cambie a cifra da seguinte. A execución completa repítese en varias roldas, a orde das bibliotecas vai rotando entre conxuntos e roldas, e cada cifra é a da súa rolda mediana.
- Tamaño. A importación dunha soa función que documenta cada biblioteca, empaquetada e minificada con esbuild e comprimida con gzip no nivel 9, menos o custo dunha importación baleira.
- Concordancia. A chamada «calquera tipo» de cada biblioteca sobre os casos que proban as opcións predeterminadas, xulgando cada caso como válido ou non válido.
A metodoloxía completa, as súas advertencias e o esquema dos resultados están en bench/README.md (en inglés).
Execúteo vostede mesmo
Sección titulada «Execúteo vostede mesmo»As bibliotecas instálanse en versións exactas, así que unha execución mide exactamente o que recolle latest.json. Peche antes os demais programas, e compare proporcións en lugar de cifras absolutas:
git clone https://github.com/josegoval/nif-dni-nie-cif-validation.gitcd nif-dni-nie-cif-validationpnpm install --frozen-lockfilepnpm bench:competitors # uns 5 minutos; escribe bench/results/latest.json e latest.mdpnpm bench, en cambio, compara cada validador coa versión 1. Un fluxo de traballo de GitHub Actions executa o mesmo benchmark baixo demanda, nun runner compartido, e sobe os resultados.