Regex numéro de TVA espagnol (NIF, CIF, NIE)
Le numéro de TVA espagnol est le NIF de l'assujetti précédé de « ES » : 9 caractères où le premier, le dernier, ou les deux sont des lettres. La FAQ VIES de la Commission le décrit ainsi : « le premier et le dernier caractère peuvent être alphabétiques ou numériques, mais pas tous les deux numériques ». Concrètement, une société a un CIF (lettre, 7 chiffres, clé chiffre ou lettre), une personne physique un DNI (8 chiffres et une lettre) ou un NIE (X, Y ou Z, 7 chiffres, une lettre). Les tentatives relues divergent : la version publiée de validator.js refuse les CIF à clé chiffre et accepte « _ » en tête, sa version de développement refuse les personnes physiques, valvat et jsvat acceptent n'importe quelle lettre initiale (I et O comprises), et la regex du Regular Expressions Cookbook accepte 9 chiffres. Voici un motif qui suit la règle de la Commission et exclut les lettres I, O et T en tête, comparé à ces tentatives.
/^ES(?:[0-9]{8}[A-Z]|[A-HJ-NP-SU-Z][0-9]{7}[0-9A-Z])$/Comparatif des patterns existants
Implémentation
const re = new RegExp("^ES(?:[0-9]{8}[A-Z]|[A-HJ-NP-SU-Z][0-9]{7}[0-9A-Z])$", "");
re.test(input);Limites
- Valide seulement la FORME : « ESB64717839 » et « ES12345678A » ont la bonne structure mais une clé fausse (lettre DNI modulo 23, clé CIF de type Luhn) et passent ce motif. La clé n'est pas recalculée.
- Le motif accepte une clé lettre ou chiffre pour toute forme juridique, car python-stdnum signale des informations contradictoires selon la forme ; validator.js (version de développement) impose au contraire un type de clé par lettre initiale.
- Les lettres initiales exclues (I, O, T) viennent de python-stdnum, pas de la FAQ de la Commission. Les formes K, L, M (personnes sans NIE) et X, Y, Z (NIE) sont acceptées : voir dni-nie-espagnol pour les identifiants de personnes physiques.
- Aucune vérification d'existence (VIES). Pas de tolérance pour espaces, tirets ou minuscules : normalisez avant validation. Les numéros du corpus sont des exemples de documentation ou synthétiques.