Ir al contenido

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.

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.

Funcionalidades de las librerías de identificadores españoles en npm, con las fuentes con que se revisó cada fila
LibreríaTiposK/L/MNormaliza la entradaObjeto de resultadoMensajes traducidosGeneradores de datos de pruebaEsquemasMódulosTamaño, cualquier tipo (min+gzip)Última versiónFuentes
nif-dni-nie-cif-validation esta versiónDNI, NIE, CIF, K/L/Msísísí: código, regla de SPEC, mensajeEN, ES, CA, EU, GLsíZod, Valibot, YupESM + CJS929 Besta versiónREADME npm
spain-id 1.1.14DNI, NIE, CIFnoparcialno (solo el tipo)nononoESM + CJS583 B2026-06-12README npm
better-dni 4.4.2DNI, NIEnonormalize() apartenonosínosolo CJS / UMD1134 B2021-05-30README npm
dni-js 1.0.0DNI, NIEnoparcialnonononosolo CJS882 B2026-08-08README npm
stdnum 1.12.6DNI, NIE, CIF, K/L/M y unos 90 paísessísísí: clase de errorsolo inglésnonoESM + CJS51.063 B2026-08-01README npm
validator.js isIdentityCard(x, "ES") 13.15.35DNI, NIEnonononononoESM (rutas internas) + CJS2539 B2026-04-02README npm
validator.js isTaxID(x, "es-ES") 13.15.35DNI, NIE, K/L/MsínononononoESM (rutas internas) + CJS6537 B2026-04-02README npm
@maistik/validate-nif 2.0.1DNI, NIE, CIFnoparcialparcial: parse(), sin el motivonononoESM + CJS456 B2026-06-14README npm
@kreyo/nif-validator 0.1.0DNI, NIE, CIFopcionalparcialnonononoESM + CJS533 B2026-04-29README npm
jsvat 2.5.4NIF-IVA de la UE (ES + NIF)sísísí: validez y paísnononoESM + CJS1186 B2024-12-12, obsoletaREADME 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.
  • 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.
  • 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.