Saltar al contingut

Primers passos

nif-dni-nie-cif-validation comprova identificadors fiscals espanyols (NIF, DNI, NIF K/L/M, NIE i CIF) segons les regles oficials, i us diu per què un número no és vàlid. No té dependències, inclou els seus propis tipus de TypeScript i funciona amb import i amb require a Node.js 20 o posterior, a tots els navegadors actuals, a Deno i a Bun.

Finestra del terminal
npm install nif-dni-nie-cif-validation

Per validar des d’un terminal o un script de shell, sense escriure codi, executeu npx nif-dni-nie-cif-validation validate 12345678Z: la guia Línia d’ordres té totes les ordres i opcions.

Les funcions isValid… responen sí o no. Accepten qualsevol valor i mai no llancen excepcions, de manera que els podeu passar el que hagi escrit l’usuari:

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: s'admeten espais, punts, guions i minúscules
isValidNif("12345678A"); // false: la lletra de control no és correcta
isValidNif(null); // false: mai no llança excepcions

Amb CommonJS, require funciona igual:

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

isValidNif accepta tots els tipus. Si un camp només n’admet alguns, feu servir la funció més específica:

El camp admet… Feu servir
Qualsevol NIF: DNI, NIF K/L/M, NIE o CIF isValidNif(value)
Només persones físiques: DNI, NIF K/L/M o NIE isValidNaturalPersonNif(value)
Un DNI (o un NIF K/L/M) isValidDni(value)
Un NIE isValidNie(value)
Empreses i altres entitats (CIF) isValidCif(value)
Un NIF-IVA espanyol (ES + NIF, només el format) isValidSpanishVat(value)
import { isValidCif, isValidNaturalPersonNif } from "nif-dni-nie-cif-validation";
isValidNaturalPersonNif("X1234567L"); // true
isValidNaturalPersonNif("B12345674"); // false: un CIF no és una persona física
isValidCif("P2807900B"); // true: Ajuntament de Madrid

No teniu clar quin document és cadascun? Consulteu DNI, NIE, NIF i CIF.

Descobriu per què i deseu la forma canònica

Secció titulada «Descobriu per què i deseu la forma canònica»

validate() retorna el tipus, la forma canònica que heu de desar i, si el valor no és vàlid, un error amb un codi, la regla de SPEC.md que no es compleix, un missatge i el caràcter de control esperat:

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".' }

Deseu normalized, no el que va escriure l’usuari: és en majúscules, sense separadors, i és igual per a totes les maneres d’escriure el mateix document.

Mostreu el missatge en l’idioma de l’usuari

Secció titulada «Mostreu el missatge en l’idioma de l’usuari»

Els missatges són en anglès per defecte. El castellà, el català, el basc i el gallec s’importen per separat, de manera que el vostre bundle només inclou els idiomes que feu servir:

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»."