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.
Instalación
Sección titulada «Instalación»npm install nif-dni-nie-cif-validationpnpm add nif-dni-nie-cif-validationyarn add nif-dni-nie-cif-validationbun add nif-dni-nie-cif-validationdeno add npm:nif-dni-nie-cif-validationPara 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.
Comprueba un número
Sección titulada «Comprueba un número»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 DNIisValidNif("X1234567L"); // true: un NIEisValidNif("B12345674"); // true: un CIFisValidNif(" 12.345.678-z "); // true: se admiten espacios, puntos, guiones y minúsculasisValidNif("12345678A"); // false: la letra de control no es correctaisValidNif(null); // false: nunca lanza excepcionesCon CommonJS, require funciona igual:
const { isValidNif } = require("nif-dni-nie-cif-validation");
isValidNif("12345678Z"); // trueElige la función adecuada
Sección titulada «Elige la función adecuada»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"); // trueisValidNaturalPersonNif("B12345674"); // false: un CIF no es una persona físicaisValidCif("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.
Muestra el mensaje en el idioma del usuario
Sección titulada «Muestra el mensaje en el idioma del usuario»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»."