Saltar al contingut

DNI, NIE, NIF i CIF

Els identificadors fiscals espanyols tenen diversos noms, i se superposen. En resum: tot número que valida aquesta biblioteca és un NIF, i el DNI, el NIE, el NIF K/L/M i el CIF són classes de NIF.

El NIF (número d’identificació fiscal) identifica cada persona i cada entitat davant l’Administració tributària espanyola. El Reial decret 1065/2007 (arts. 19 a 22) defineix qui rep cada classe. El primer caràcter del número distingeix les classes, que mai no se superposen (NIF-1):

Classe A qui s’assigna Format Exemple type a validate()
DNI Ciutadans espanyols 8 xifres i una lletra de control 12345678Z "DNI"
NIF K/L/M Persones sense DNI ni NIE (vegeu més avall) K, L o M, 7 xifres i una lletra de control K1234567L "NIF_KLM"
NIE Persones estrangeres X, Y o Z, 7 xifres i una lletra de control X1234567L "NIE"
CIF Empreses i altres entitats Una clau d’entitat, 7 xifres i un caràcter de control (una xifra o una lletra) B12345674 "CIF"
import { getNifType } from "nif-dni-nie-cif-validation";
getNifType("12345678Z"); // "DNI"
getNifType("K1234567L"); // "NIF_KLM"
getNifType("X1234567L"); // "NIE"
getNifType("B12345674"); // "CIF"
getNifType("T1234567A"); // null: cap classe de NIF no comença per T

getNifType() només mira el format: getNifType("12345678A") és "DNI" encara que la lletra sigui incorrecta. Per saber si un número és vàlid, feu servir validate() o una funció isValid….

Per a un ciutadà espanyol, el NIF és el número del seu DNI (document nacional d’identitat): 8 xifres, amb els zeros de l’esquerra inclosos, i una lletra de control en majúscula calculada a partir del número (DNI-1, DNI-2). Molta gent l’escriu sense els zeros inicials, o amb punts i un guió; la biblioteca accepta totes dues coses i retorna la forma canònica perquè la deseu:

import { validate } from "nif-dni-nie-cif-validation";
validate("1234567L").normalized; // "01234567L": s'hi torna a afegir el zero inicial
validate("12.345.678-z").normalized; // "12345678Z"

Les persones estrangeres reben un NIE (número d’identitat d’estranger): X, Y o Z, 7 xifres i una lletra de control (NIE-1). Primer es va fer servir la sèrie X; quan es va exhaurir, va seguir la Y, i després la Z.

Fins al 2008, els NIE tenien 10 caràcters: una X, 8 xifres i una lletra. Aquests números continuen sent vàlids, i la seva forma canònica elimina el zero que segueix la X (NIE-3):

import { isValidNie, validate } from "nif-dni-nie-cif-validation";
isValidNie("X01234567L"); // true: la forma antiga de 10 caràcters
validate("X01234567L").normalized; // "X1234567L"
isValidNie("X11234567L"); // false: només es pot suprimir un 0 inicial

Algunes persones físiques necessiten un NIF però no tenen DNI ni NIE. Reben un NIF que comença per una lletra (KLM-1):

  • K: espanyols menors de 14 anys residents a Espanya que no tenen DNI.
  • L: espanyols residents a l’estranger que no tenen DNI.
  • M: persones estrangeres que no tenen NIE (per exemple, mentre es tramita; un NIF M pot ser temporal).

Són persones, no empreses. isValidDni() i isValidNaturalPersonNif() els accepten, i validate() els identifica com a "NIF_KLM":

import { isValidCif, isValidDni, validate } from "nif-dni-nie-cif-validation";
isValidDni("K1234567L"); // true
isValidCif("K1234567L"); // false: K no és una clau d'entitat
validate("M1234567L").type; // "NIF_KLM"

Les empreses, les associacions, els organismes públics i les altres entitats tenen un NIF que comença per una clau d’entitat, una lletra que indica quin tipus d’entitat és, seguida de 7 xifres i un caràcter de control (CIF-1, CIF-2).

Fins al 2008, aquest número es deia CIF (codi d’identificació fiscal). L’Ordre EHA/451/2008 li va canviar el nom: oficialment ara és el «NIF de persona jurídica o entitat». Tothom continua cercant «CIF», de manera que la biblioteca manté el nom (isValidCif, type: "CIF"), amb isValidLegalEntityNif com a àlies.

import { describeCifOrganisation, validate } from "nif-dni-nie-cif-validation";
validate("B12345674").meta; // { orgKey: "B", orgDescription: "Limited liability company" }
describeCifOrganisation("G"); // "Association"

Aquestes són les 17 claus d’entitat, amb el nom que la biblioteca dona a cadascuna en l’idioma d’aquesta pàgina i la classe de caràcter de control que porta cada clau (CIF-3):

Les claus d'entitat del CIF, el tipus d'entitat que representa cadascuna i la classe de caràcter de control que porta
ClauTipus d'entitatCaràcter de control
ASocietat anònimauna xifra
BSocietat de responsabilitat limitadauna xifra
CSocietat col·lectivauna xifra
DSocietat comanditàriauna xifra
EComunitat de béns, herència jacent o una altra entitat mancada de personalitat jurídica no inclosa expressament en altres clausuna xifra
FSocietat cooperativauna xifra
GAssociacióuna xifra
HComunitat de propietaris en règim de propietat horitzontaluna xifra
JSocietat civiluna xifra
NEntitat estrangerauna lletra
PCorporació localuna lletra
QOrganisme públicuna lletra
RCongregació o institució religiosauna lletra
SÒrgan de l'Administració de l'Estat o d'una comunitat autònomauna lletra
UUnió temporal d'empresesuna xifra
VUn altre tipus no definit a la resta de clausuna xifra
WEstabliment permanent d'una entitat no resident en territori espanyoluna lletra

Des del 2008, les 7 xifres són aleatòries: ja no diuen res de la província, de manera que la biblioteca no comprova codis de província (CIF-5).

Un NIF-IVA espanyol, que es fa servir en les operacions intracomunitàries, és ES seguit del NIF (VAT-1). isValidSpanishVat() comprova aquest format; validate() només accepta el prefix si ho demaneu:

import { isValidSpanishVat, validate } from "nif-dni-nie-cif-validation";
isValidSpanishVat("ES12345678Z"); // true
validate("ES12345678Z").error?.code; // "INVALID_FORMAT"
validate("ES12345678Z", { allowVatPrefix: true }).normalized; // "12345678Z"

Algunes regles que trobareu a internet no tenen font oficial, i la biblioteca no les aplica. Un número que comença per T no és un NIF, un CIF que comença per 00 no necessita una lletra i les xifres del CIF no porten codi de província. Les preguntes freqüents expliquen cada cas, i les fonts oficials les enumeren.