Regex German Steuer-IdNr (tax identification number)
The Steuer-IdNr is a string of 11 digits whose first is never 0 and whose 11th is a check digit (ISO 7064, modulo 11,10). The structure rules published by the Bayerisches Landesamt für Steuern (ELSTER document) are: among the first 10 digits exactly one digit occurs two or three times, the others at most once, and if it occurs three times, never at three consecutive positions. A regex can express this with lookaheads and backreferences, which few libraries do: the four real attempts I read settle for '11 digits', or 11 digits with a non-zero first digit, and accept '12345678903' (no repeated digit). The modulo 11,10 key cannot be expressed in a regex: add the code check described in the limits.
/^(?!0)(?=\d{11}$)(?=\d*?(\d)\d*?\1\d+$)(?!\d*?(\d)(?:\d*?\2){3}\d+$)(?!\d*?(\d)(?=\d*\3\d+$)(?=\d*?(?!\3)(\d)\d*\4\d+$))(?!\d*?(\d)\5\5\d+$)\d{11}$/passes 27/27 cases
Comparison of existing patterns
Implementation
const re = new RegExp("^(?!0)(?=\\d{11}$)(?=\\d*?(\\d)\\d*?\\1\\d+$)(?!\\d*?(\\d)(?:\\d*?\\2){3}\\d+$)(?!\\d*?(\\d)(?=\\d*\\3\\d+$)(?=\\d*?(?!\\3)(\\d)\\d*\\4\\d+$))(?!\\d*?(\\d)\\5\\5\\d+$)\\d{11}$", "");
re.test(input);Limits
- Valide la structure (11 chiffres, premier non nul, répétitions) mais PAS la clé ISO 7064 modulo 11,10 : « 36574261890 » a la bonne structure et une clé fausse, et passe. Complément : x = 10 ; pour chacun des 10 premiers chiffres d : y = (d + x) % 10 (si 0, alors 10) ; x = (2 × y) % 11 ; la clé est 11 − x, ramenée à 0 si elle vaut 10.
- Les test-IdNr à zéro initial (comme 02476291358, citée par le document ELSTER) sont rejetées : si vous gérez un environnement de test fiscal, assouplissez « (?!0) ».
- Ne dit rien de l'attribution du numéro. Le motif suit le document ELSTER (un chiffre répété deux ou trois fois) ; la spécification DG TAXUD de 2017 décrit deux variantes successives de cette règle, la plus ancienne n'autorisant que le doublon. Les espaces de présentation (« 36 574 261 809 ») sont rejetés : normalisez d'abord.
- Les numéros du corpus sont ceux du document ELSTER et de documentations, ou synthétiques à clé recalculée ; une Steuer-IdNr est une donnée personnelle, n'en utilisez pas de réelles.