Migrar des de la v1
La versió 2 fa que els validadors segueixin per defecte SPEC.md, les fonts oficials espanyoles. Canvien quatre coses; tota la resta, inclosos tots els noms de les exportacions i els seus àlies, continua igual. La llista completa, amb tots els detalls, és a MIGRATION.md (en anglès).
Via ràpida: mantenir els resultats de la v1
Secció titulada «Via ràpida: mantenir els resultats de la v1»Tots els validadors accepten opcions com a segon argument. Aquestes dues donen exactament els resultats de la v1.0.11; un test compara totes dues versions amb unes 490.000 entrades:
import { isValidNif } from "nif-dni-nie-cif-validation";
const V1_COMPATIBLE = { normalize: false, cifControl: "lenient" } as const;
isValidNif("G1234567D"); // falseisValidNif("G1234567D", V1_COMPATIBLE); // true, com a la v1.0.11Feu-les servir com a solució provisional per a les dades desades, i després passeu als valors per defecte.
Què canvia
Secció titulada «Què canvia»| # | Canvi | A qui afecta | Mantenir el comportament de la v1 |
|---|---|---|---|
| 1 | Les claus de CIF C, D, F, G, J, U i V necessiten una xifra de control | CIF com G1234567D deixen de ser vàlids |
{ cifControl: "lenient" } |
| 2 | L’entrada es normalitza per defecte | Valors amb espais, punts, guions o barres, o un DNI sense els zeros inicials, passen a ser vàlids | { normalize: false } |
| 3 | TypeScript: els validadors tenen un segon paràmetre | ids.filter(isValidNif) deixa de compilar |
Escriviu ids.filter((id) => isValidNif(id)) |
| 4 | Només es poden importar els punts d’entrada del paquet | Importacions de fitxers dins de dist/ |
Importeu des de nif-dni-nie-cif-validation |
1. El control del CIF segueix CIF-3
Secció titulada «1. El control del CIF segueix CIF-3»La nota tècnica de l’AEAT assigna una xifra de control a les claus A B C D E F G H J U V i una lletra a N P Q R S W (CIF-3). La versió 1 acceptava una lletra o una xifra per a C, D, F, G, J, U i V, cosa que no té base oficial. Afecta isValidNif, isValidCif (isValidLegalEntityNif) i isValidCifControlCode (isValidLegalEntityNifControlCode).
Abans, a la v1:
import { isValidCif } from "nif-dni-nie-cif-validation";
isValidCif("G1234567D"); // trueisValidCif("G12345674"); // trueDesprés, a la v2:
import { isValidCif } from "nif-dni-nie-cif-validation";
isValidCif("G1234567D"); // false: la G porta xifraisValidCif("G12345674"); // trueisValidCif("G1234567D", { cifControl: "lenient" }); // true, com a la v1Només canvien C, D, F, G, J, U i V: A, B, E i H sempre han necessitat una xifra, i N, P, Q, R, S i W una lletra, a totes dues versions.
2. L’entrada es normalitza
Secció titulada «2. L’entrada es normalitza»Ara els validadors netegen l’entrada abans de comprovar-la: es treuen els espais en blanc i els punts (NORM-2), els guions i les barres (NORM-3), i a un DNI amb menys de 8 xifres se li tornen a afegir els zeros inicials (NORM-4). La neteja mai no converteix un document no vàlid en vàlid, de manera que cap resultat true dels validadors de documents complets no canvia; alguns resultats false passen a true. Les funcions que només comproven el caràcter de control, isValidDniLetter i isValidCifControlCode, no comproven el format, de manera que amb separadors el seu resultat pot canviar en tots dos sentits: a la v1, isValidCifControlCode("A 7727886") era true perquè l’espai comptava com un 0 (consulteu MIGRATION.md, en anglès).
Abans, a la v1:
import { isValidCif, isValidDni, isValidNif } from "nif-dni-nie-cif-validation";
isValidNif(" 12.345.678-Z "); // falseisValidDni("1234567L"); // falseisValidCif("B-1234567-4"); // falseDesprés, a la v2:
import { isValidCif, isValidDni, isValidNif } from "nif-dni-nie-cif-validation";
isValidNif(" 12.345.678-Z "); // trueisValidDni("1234567L"); // trueisValidCif("B-1234567-4"); // trueisValidNif(" 12.345.678-Z ", { normalize: false }); // false, com a la v1Les minúscules i el NIE antic de 10 caràcters (X01234567L) ja s’acceptaven a la v1, i es continuen acceptant. Si deseu el valor, deseu-ne la forma canònica: la retorna normalize(), nova a la v2. Consulteu Normalitzar i formatar l’entrada.
3. TypeScript: un segon paràmetre
Secció titulada «3. TypeScript: un segon paràmetre»Tots els validadors són ara (value: unknown, opts?: IsValidOptions) => boolean. El primer paràmetre accepta més que abans, cosa que no trenca res, però el segon fa que TypeScript rebutgi un validador passat directament a un mètode d’array, el segon argument del qual és l’índex:
import { isValidNif } from "nif-dni-nie-cif-validation";
const ids = ["12345678Z", "B12345675"];
// @ts-expect-error: l'índex (un número) no és un objecte d'opcionsids.filter(isValidNif);ids.filter((id) => isValidNif(id)); // ["12345678Z"]En temps d’execució no canvia res: un número com a opcions s’ignora, de manera que el JavaScript sense tipus continua funcionant.
4. Importeu des del paquet, no des de dist/
Secció titulada «4. Importeu des del paquet, no des de dist/»La versió 2 publica mòduls ES i CommonJS i els declara en un mapa exports. Només es poden importar el mateix paquet, les seves subrutes (/locales/<code>, /generate, /zod, /valibot, /yup) i package.json, de manera que una ruta als fitxers compilats falla amb ERR_PACKAGE_PATH_NOT_EXPORTED:
const { isValidNif } = require("nif-dni-nie-cif-validation/dist/nif/nif");const { isValidNif } = require("nif-dni-nie-cif-validation");Els validadors i les altres funcions s’importen des de nif-dni-nie-cif-validation; els idiomes, els generadors i els esquemes, des dels seus propis punts d’entrada (/locales/<code>, /generate, /zod, /valibot, /yup). require() i import funcionen a Node.js 20 o posterior i a tots els bundlers.
Novetats de la v2
Secció titulada «Novetats de la v2»Res d’això no trenca el codi existent:
validate(): el tipus, la forma canònica i, si el valor no és vàlid, un codi d’error, la regla de SPEC i un missatge.normalize()iformat(),getNifType(),computeControlCharacter(),describeCifOrganisation()iisValidSpanishVat().- L’opció
rejectPlaceholdersi, avalidate(), tambétypes,allowVatPrefixilocale. - Missatges en castellà, català, basc i gallec.
- Generadors de dades de prova i esquemes de Zod, Valibot i Yup.
import { validate } from "nif-dni-nie-cif-validation";
validate("12345678A").error?.code; // "INVALID_CONTROL_CHARACTER"validate("12345678A").error?.rule; // "DNI-2"Llista de comprovació
Secció titulada «Llista de comprovació»-
Actualitzeu i executeu els vostres tests.
-
Si els CIF desats amb lletra de control per a C, D, F, G, J, U o V han de continuar sent vàlids, passeu
{ cifControl: "lenient" }on els comproveu, i planifiqueu la correcció de les dades. -
Si algun codi depenia de
falseper a valors amb separadors, passeu{ normalize: false }o, millor, deseunormalize(value). -
A TypeScript, substituïu
array.filter(isValidX)per una funció fletxa. -
Substituïu qualsevol importació des de
nif-dni-nie-cif-validation/dist/…per una des denif-dni-nie-cif-validation. -
Per als missatges en un altre idioma, importeu-ne l’objecte d’idioma i passeu-lo com a
locale.