Regex numéro de TVA italien (partita IVA)
La partita IVA italienne compte 11 chiffres : 7 chiffres de matricule, 3 chiffres de code de l'ufficio qui a attribué le numéro, puis une clé de type Luhn définie par le décret ministériel du 23 décembre 1976. Le code de l'ufficio correspond à une province : 001 à 100, 120 et 121, plus 888 (franchise) et 999 (non-résidents identifiés en Italie). La FAQ VIES de la Commission publie seulement « IT + 11 chiffres », et les trois implémentations de TVA relues (validator.js, jsvat, valvat) ne contrôlent que cela, comme la regex unique du Regular Expressions Cookbook : « IT12345670009 » (code 000) ou « IT12345678895 » (code 889) passent. Voici un motif qui borne le code d'ufficio et refuse un matricule nul, comparé à ces tentatives.
/^IT(?!0{7})[0-9]{7}(?:00[1-9]|0[1-9][0-9]|100|12[01]|888|999)[0-9]$/passe 29/29 cas
Comparatif des patterns existants
Implémentation
const re = new RegExp("^IT(?!0{7})[0-9]{7}(?:00[1-9]|0[1-9][0-9]|100|12[01]|888|999)[0-9]$", "");
re.test(input);Limites
- Valide seulement la FORME : « IT12345670018 » a un code d'ufficio valide mais une clé Luhn fausse et passe ce motif. La clé (décret du 23 décembre 1976) n'est pas recalculée par la regex.
- La liste des codes d'ufficio (001-100, 120, 121, 888, 999) vient de it.wikipedia et de python-stdnum ; jsvat tolère jusqu'à 201. Si l'administration ajoutait un code, ce motif le refuserait : à relire régulièrement.
- Le code fiscal d'une personne physique (16 caractères) n'est pas une partita IVA, et un code fiscal de société peut ressembler à une partita IVA : voir la fiche codice-fiscale. Aucune vérification d'existence (VIES).
- Pas de tolérance pour les espaces ou minuscules ; normalisez avant validation. Les numéros du corpus sont des exemples de documentation ou synthétiques.