Regex numéro de TVA allemand (USt-IdNr.)
Le numéro de TVA intracommunautaire allemand, ou USt-IdNr., s'écrit « DE » suivi de 9 chiffres : c'est la structure publiée par la Commission européenne dans la FAQ du service VIES. Les 9 chiffres se terminent par une clé calculée selon l'algorithme ISO 7064 modulo 11,10, et, d'après python-stdnum et jsvat, le premier chiffre n'est jamais « 0 ». Parmi les quatre tentatives relues, celle de validator.js rend le préfixe « DE » facultatif : elle accepte donc n'importe quelle suite de 9 chiffres, et celle de valvat accepte un zéro en tête. Voici un motif ancré qui exige le préfixe et borne le premier chiffre, comparé à ces tentatives ; la clé n'est pas vérifiée par la regex.
/^DE[1-9][0-9]{8}$/passe 24/24 cas
Comparatif des patterns existants
Implémentation
const re = new RegExp("^DE[1-9][0-9]{8}$", "");
re.test(input);Limites
- Valide seulement la FORME : « DE136695978 » a la bonne structure mais une clé fausse (ISO 7064 modulo 11,10) et passe ce motif. La clé n'est pas recalculée par la regex.
- N'établit pas que le numéro est attribué : seule une interrogation de VIES (ou du BZSt) le confirme. Le numéro de TVA (USt-IdNr.) ne doit pas être confondu avec le Steuernummer, le numéro fiscal national, de format différent.
- L'exclusion d'un premier chiffre « 0 » repose sur python-stdnum et jsvat (sources secondaires) ; elle n'est pas énoncée dans la FAQ de la Commission.
- Pas de tolérance pour les espaces, tirets ou minuscules : normalisez (supprimer les séparateurs, mettre en majuscules) avant de valider. Les numéros du corpus sont synthétiques ; ne testez pas avec de vrais numéros de clients.