Regex German VAT number (USt-IdNr.)
The German intra-EU VAT number, or USt-IdNr., is written 'DE' followed by 9 digits: that is the structure published by the European Commission in the VIES service FAQ. The 9 digits end with a check digit computed with the ISO 7064 modulo 11,10 algorithm and, according to python-stdnum and jsvat, the first digit is never '0'. Among the four attempts read, validator.js makes the 'DE' prefix optional, so it accepts any string of 9 digits, and valvat accepts a leading zero. Here's an anchored pattern that requires the prefix and bounds the first digit, compared against those attempts; the check digit is not verified by the regex.
/^DE[1-9][0-9]{8}$/passes 24/24 cases
Comparison of existing patterns
Implementation
const re = new RegExp("^DE[1-9][0-9]{8}$", "");
re.test(input);Limits
- 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.