Ir ao contido

DNI, NIE, NIF e CIF

Os identificadores fiscais españois teñen varios nomes, e solápanse. En resumo: todo número que valida esta biblioteca é un NIF, e o DNI, o NIE, o NIF K/L/M e o CIF son clases de NIF.

O NIF (número de identificación fiscal) identifica cada persoa e cada entidade ante a Administración tributaria española. O Real decreto 1065/2007 (arts. 19 a 22) define quen recibe cada clase. O primeiro carácter do número distingue as clases, que nunca se solapan (NIF-1):

Clase A quen se asigna Formato Exemplo type en validate()
DNI Cidadáns españois 8 díxitos e unha letra de control 12345678Z "DNI"
NIF K/L/M Persoas sen DNI nin NIE (véxase máis abaixo) K, L ou M, 7 díxitos e unha letra de control K1234567L "NIF_KLM"
NIE Persoas estranxeiras X, Y ou Z, 7 díxitos e unha letra de control X1234567L "NIE"
CIF Empresas e outras entidades Unha clave de entidade, 7 díxitos e un carácter de control (un díxito ou unha letra) 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: ningunha clase de NIF comeza por T

getNifType() só mira o formato: getNifType("12345678A") é "DNI" aínda que a súa letra sexa incorrecta. Para saber se un número é válido, use validate() ou unha función isValid….

Para un cidadán español, o NIF é o número do seu DNI (documento nacional de identidade): 8 díxitos, incluídos os ceros á esquerda, e unha letra de control en maiúscula calculada a partir do número (DNI-1, DNI-2). Moita xente escríbeo sen os ceros iniciais, ou con puntos e un guión; a biblioteca acepta as dúas cousas e devolve a forma canónica para que a garde:

import { validate } from "nif-dni-nie-cif-validation";
validate("1234567L").normalized; // "01234567L": engádese de novo o cero inicial
validate("12.345.678-z").normalized; // "12345678Z"

As persoas estranxeiras reciben un NIE (número de identidade de estranxeiro): X, Y ou Z, 7 díxitos e unha letra de control (NIE-1). Primeiro usouse a serie X; cando se esgotou, seguiu a Y, e despois a Z.

Ata 2008, os NIE tiñan 10 caracteres: unha X, 8 díxitos e unha letra. Eses números seguen sendo válidos, e a súa forma canónica elimina o cero que segue á X (NIE-3):

import { isValidNie, validate } from "nif-dni-nie-cif-validation";
isValidNie("X01234567L"); // true: a forma antiga de 10 caracteres
validate("X01234567L").normalized; // "X1234567L"
isValidNie("X11234567L"); // false: só se pode suprimir un 0 inicial

Algunhas persoas físicas necesitan un NIF pero non teñen DNI nin NIE. Reciben un NIF que comeza por unha letra (KLM-1):

  • K: españois menores de 14 anos residentes en España que non teñen DNI.
  • L: españois residentes no estranxeiro que non teñen DNI.
  • M: persoas estranxeiras que non teñen NIE (por exemplo, mentres se tramita; un NIF M pode ser temporal).

Son persoas, non empresas. isValidDni() e isValidNaturalPersonNif() acéptanos, e validate() identifícaos como "NIF_KLM":

import { isValidCif, isValidDni, validate } from "nif-dni-nie-cif-validation";
isValidDni("K1234567L"); // true
isValidCif("K1234567L"); // false: K non é unha clave de entidade
validate("M1234567L").type; // "NIF_KLM"

As empresas, as asociacións, os organismos públicos e as demais entidades teñen un NIF que comeza por unha clave de entidade, unha letra que indica que tipo de entidade é, seguida de 7 díxitos e un carácter de control (CIF-1, CIF-2).

Ata 2008, este número chamábase CIF (código de identificación fiscal). A Orde EHA/451/2008 cambioulle o nome: oficialmente agora é o «NIF de persoa xurídica ou entidade». Todo o mundo segue a buscar «CIF», así que a biblioteca mantén o nome (isValidCif, type: "CIF"), con isValidLegalEntityNif como alias.

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

Estas son as 17 claves de entidade, co nome que a biblioteca lle dá a cada unha no idioma desta páxina e a clase de carácter de control que leva cada clave (CIF-3):

As claves de entidade do CIF, o tipo de entidade que representa cada unha e a clase de carácter de control que leva
ClaveTipo de entidadeCarácter de control
ASociedade anónimaun díxito
BSociedade de responsabilidade limitadaun díxito
CSociedade colectivaun díxito
DSociedade comanditariaun díxito
EComunidade de bens, herdanza xacente ou outra entidade carente de personalidade xurídica non incluída expresamente noutras clavesun díxito
FSociedade cooperativaun díxito
GAsociaciónun díxito
HComunidade de propietarios en réxime de propiedade horizontalun díxito
JSociedade civilun díxito
NEntidade estranxeiraunha letra
PCorporación localunha letra
QOrganismo públicounha letra
RCongregación ou institución relixiosaunha letra
SÓrgano da Administración do Estado ou dunha comunidade autónomaunha letra
UUnión temporal de empresasun díxito
VOutro tipo non definido no resto de clavesun díxito
WEstablecemento permanente dunha entidade non residente en territorio españolunha letra

Desde 2008, os 7 díxitos son aleatorios: xa non din nada da provincia, así que a biblioteca non comproba códigos de provincia (CIF-5).

Un NIF-IVE español, que se usa nas operacións intracomunitarias, é ES seguido do NIF (VAT-1). isValidSpanishVat() comproba ese formato; validate() só acepta o prefixo se o pide:

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

Algunhas regras que atopará en internet non teñen fonte oficial, e a biblioteca non as aplica. Un número que comeza por T non é un NIF, un CIF que comeza por 00 non necesita unha letra e os díxitos do CIF non levan código de provincia. As preguntas frecuentes explican cada caso, e as fontes oficiais enuméranos.