Comparación con otras librerías
Varias librerías de npm validan identificadores españoles. Se diferencian en qué documentos cubren, cómo tratan lo que escriben los usuarios y qué te dicen cuando un número no es válido. Esta página compara sus funcionalidades; la de rendimiento compara su velocidad, su tamaño y su concordancia con SPEC.md.
Tabla de funcionalidades
Sección titulada «Tabla de funcionalidades»Revisado el 1 de octubre de 2026 con el README, el package.json y la página de npm de cada librería. Las versiones y los tamaños salen de los resultados del benchmark.
| Librería | Tipos | K/L/M | Normaliza la entrada | Objeto de resultado | Mensajes traducidos | Generadores de datos de prueba | Esquemas | Módulos | Tamaño, cualquier tipo (min+gzip) | Última versión | Fuentes |
|---|---|---|---|---|---|---|---|---|---|---|---|
| nif-dni-nie-cif-validation esta versión | DNI, NIE, CIF, K/L/M | sí | sí | sí: código, regla de SPEC, mensaje | EN, ES, CA, EU, GL | sí | Zod, Valibot, Yup | ESM + CJS | 929 B | esta versión | README npm |
| spain-id 1.1.14 | DNI, NIE, CIF | no | parcial | no (solo el tipo) | no | no | no | ESM + CJS | 583 B | 2026-06-12 | README npm |
| better-dni 4.4.2 | DNI, NIE | no | normalize() aparte | no | no | sí | no | solo CJS / UMD | 1134 B | 2021-05-30 | README npm |
| dni-js 1.0.0 | DNI, NIE | no | parcial | no | no | no | no | solo CJS | 882 B | 2026-08-08 | README npm |
| stdnum 1.12.6 | DNI, NIE, CIF, K/L/M y unos 90 países | sí | sí | sí: clase de error | solo inglés | no | no | ESM + CJS | 51.063 B | 2026-08-01 | README npm |
| validator.js isIdentityCard(x, "ES") 13.15.35 | DNI, NIE | no | no | no | no | no | no | ESM (rutas internas) + CJS | 2539 B | 2026-04-02 | README npm |
| validator.js isTaxID(x, "es-ES") 13.15.35 | DNI, NIE, K/L/M | sí | no | no | no | no | no | ESM (rutas internas) + CJS | 6537 B | 2026-04-02 | README npm |
| @maistik/validate-nif 2.0.1 | DNI, NIE, CIF | no | parcial | parcial: parse(), sin el motivo | no | no | no | ESM + CJS | 456 B | 2026-06-14 | README npm |
| @kreyo/nif-validator 0.1.0 | DNI, NIE, CIF | opcional | parcial | no | no | no | no | ESM + CJS | 533 B | 2026-04-29 | README npm |
| jsvat 2.5.4 | NIF-IVA de la UE (ES + NIF) | sí | sí | sí: validez y país | no | no | no | ESM + CJS | 1186 B | 2024-12-12, obsoleta | README npm |
Qué significan las columnas:
- Tipos: los documentos que valida la librería. Los NIF K/L/M son de personas sin DNI ni NIE (KLM-1).
- Normaliza la entrada: si acepta lo que escriben los usuarios (minúsculas, espacios, puntos, guiones) sin un paso aparte. «Parcial» significa que acepta parte de esto.
- Objeto de resultado: si puede decirte algo más que sí o no, como el tipo o el motivo.
- Tamaño: un validador de cualquier tipo, minificado y comprimido con gzip, según la medición del benchmark.
- Fuentes: el README y la página de npm de cada librería, con los que se ha revisado cada fila en la fecha indicada arriba.
Cuándo es mejor otra librería
Sección titulada «Cuándo es mejor otra librería»- Muchos países: stdnum. stdnum, la versión en JavaScript de python-stdnum, valida identificadores de unos 90 países con una sola API, incluidos todos los tipos españoles. Si necesitas varios países, es una buena elección. Esta librería solo cubre España, y ahí profundiza más.
- El bundle más pequeño: spain-id o @maistik/validate-nif. Para un solo validador, spain-id y @maistik/validate-nif ocupan menos que esta librería: consulta los tamaños. No aceptan los NIF K/L/M ni la forma antigua del NIE, y no dicen por qué un número no es válido, así que gastan menos bytes. Si cada byte cuenta y no necesitas nada de eso, son buenas opciones.
- Muchos tipos de cadenas: validator.js. Si ya usas validator.js para correos y URL, sus dos funciones españolas pueden bastarte para DNI y NIE. No valida el CIF.
Qué añade esta librería
Sección titulada «Qué añade esta librería»- Todos los tipos, incluidos los NIF K/L/M y el NIE antiguo de 10 caracteres, y las reglas de control oficiales del CIF (CIF-3).
- Fuentes para cada regla: cada una tiene un identificador y una cita en SPEC.md, y cada error indica la regla que no se cumple.
- El motivo, como un código de error, una regla de SPEC y un mensaje en inglés, español, catalán, euskera o gallego.
- Normalización y la forma canónica que hay que guardar, generadores de datos de prueba y esquemas de Zod, Valibot y Yup.
Cuando las librerías discrepan de SPEC.md, la página de rendimiento cuenta las discrepancias de cada una e indica cuáles se deben a una decisión que SPEC.md documenta.