Rexact
Cheatsheet

Regex numéro de registre national belge

Le numéro national belge a 11 chiffres : la date de naissance AAMMJJ, 3 chiffres de série et 2 chiffres de clé (97 moins le reste modulo 97, avec le préfixe 2 pour les naissances depuis 2000). Il s'écrit « 85.07.30-033.28 » ou, dans les documents officiels de l'IBZ, « 42.01.22 051-81 ». Mois et jour valent 00 quand la date est incomplète, et les numéros bis (étrangers sans numéro national) ajoutent 20 ou 40 au mois. Les tentatives réelles que j'ai relues sont des regex à chiffres : validator.js n'accepte que 11 chiffres collés, validate-insz exige le format pointé strict, et une bibliothèque TypeScript accepte « 85.07.30.033.28 » comme « 85-07-30-033-28 ». Voici un motif qui borne mois, jours et série, comparé à ces trois tentatives.

/^[0-9]{2}[. ]?(?:0[0-9]|1[0-2]|2[0-9]|3[0-2]|4[0-9]|5[0-2])[. ]?(?:0[0-9]|[12][0-9]|3[01])[- ]?(?!000|999)[0-9]{3}[-.]?[0-9]{2}$/
passe 23/23 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[0-9]{2}[. ]?(?:0[0-9]|1[0-2]|2[0-9]|3[0-2]|4[0-9]|5[0-2])[. ]?(?:0[0-9]|[12][0-9]|3[01])[- ]?(?!000|999)[0-9]{3}[-.]?[0-9]{2}$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne calcule pas la clé modulo 97. « 85073003329 » et « 17073003385 » ont la bonne forme mais une clé fausse et passent ce motif. Le siècle n'est pas codé dans le numéro : seule la clé permet de distinguer 1985 de 2085 (préfixe 2).
  • Le mois accepte 00 à 12 (date incomplète comprise), 20 à 32 et 40 à 52 (numéros bis, relevés dans le code de validate-insz, non dans le document IBZ consulté) ; le jour accepte 00 à 31 sans contrôler le nombre de jours du mois. La série 000 et 999 est exclue ; l'IBZ réserve les séries impaires aux hommes et paires aux femmes, ce que ce motif ne vérifie pas.
  • Tolère les séparateurs usuels (points entre année, mois et jour, tiret ou espace avant la série, tiret ou point avant la clé) mais refuse les mélanges arbitraires : « 85.07.30.033.28 » est rejeté. Normalisez en 11 chiffres avant stockage.
  • Les exemples viennent du document IBZ et de python-stdnum ; ne mettez jamais de vrais numéros nationaux dans vos tests. Le document IBZ n'était plus servi à son adresse d'origine : il a été lu via une copie Wayback.

Pages liées