Ir al contenido

Primeros pasos

nif-dni-nie-cif-validation comprueba identificadores fiscales españoles (NIF, DNI, NIF K/L/M, NIE y CIF) según las reglas oficiales, y te dice por qué un número no es válido. No tiene dependencias, incluye sus propios tipos de TypeScript y funciona con import y con require en Node.js 20 o posterior, en todos los navegadores actuales, en Deno y en Bun.

Ventana de terminal
npm install nif-dni-nie-cif-validation

Para validar desde un terminal o un script de shell, sin escribir código, ejecuta npx nif-dni-nie-cif-validation validate 12345678Z: la guía Línea de comandos tiene todos los comandos y opciones.

Las funciones isValid… responden sí o no. Aceptan cualquier valor y nunca lanzan excepciones, así que puedes pasarles lo que haya escrito el usuario:

import { isValidNif } from "nif-dni-nie-cif-validation";
isValidNif("12345678Z"); // true: un DNI
isValidNif("X1234567L"); // true: un NIE
isValidNif("B12345674"); // true: un CIF
isValidNif(" 12.345.678-z "); // true: se admiten espacios, puntos, guiones y minúsculas
isValidNif("12345678A"); // false: la letra de control no es correcta
isValidNif(null); // false: nunca lanza excepciones

Con CommonJS, require funciona igual:

const { isValidNif } = require("nif-dni-nie-cif-validation");
isValidNif("12345678Z"); // true

isValidNif acepta todos los tipos. Si un campo solo admite algunos, usa la función más específica:

El campo admite… Usa
Cualquier NIF: DNI, NIF K/L/M, NIE o CIF isValidNif(value)
Solo personas físicas: DNI, NIF K/L/M o NIE isValidNaturalPersonNif(value)
Un DNI (o un NIF K/L/M) isValidDni(value)
Un NIE isValidNie(value)
Empresas y otras entidades (CIF) isValidCif(value)
Un NIF-IVA español (ES + NIF, solo el formato) isValidSpanishVat(value)
import { isValidCif, isValidNaturalPersonNif } from "nif-dni-nie-cif-validation";
isValidNaturalPersonNif("X1234567L"); // true
isValidNaturalPersonNif("B12345674"); // false: un CIF no es una persona física
isValidCif("P2807900B"); // true: Ayuntamiento de Madrid

¿No tienes claro qué documento es cada uno? Consulta DNI, NIE, NIF y CIF.

Descubre por qué y guarda la forma canónica

Sección titulada «Descubre por qué y guarda la forma canónica»

validate() devuelve el tipo, la forma canónica que debes guardar y, si el valor no es válido, un error con un código, la regla de SPEC.md que no se cumple, un mensaje y el carácter de control esperado:

import { validate } from "nif-dni-nie-cif-validation";
validate(" 12.345.678-z ");
// { valid: true, type: "DNI", normalized: "12345678Z" }
validate("12345678A").error;
// { code: "INVALID_CONTROL_CHARACTER", rule: "DNI-2", expected: "Z",
// message: 'The control character is not correct: for this DNI it should be "Z".' }

Guarda normalized, no lo que escribió el usuario: está en mayúsculas, sin separadores, y es igual para todas las formas de escribir el mismo documento.

Los mensajes están en inglés por defecto. El español, el catalán, el euskera y el gallego se importan por separado, así que tu bundle solo incluye los idiomas que usas:

import { validate } from "nif-dni-nie-cif-validation";
import { es } from "nif-dni-nie-cif-validation/locales/es";
validate("12345678A", { locale: es }).error?.message;
// "El carácter de control no es correcto: para este DNI debería ser «Z»."