Rexact
Cheatsheet

Regex BSN néerlandais (burgerservicenummer)

Un BSN est un numéro à 9 chiffres dont le dernier est une clé « elfproef » : la somme des 8 premiers chiffres pondérés 9, 8, 7, 6, 5, 4, 3, 2 doit être égale au 9e chiffre modulo 11 (équivalent à pondérer le dernier chiffre par -1 et à exiger une somme divisible par 11) ; un reste de 10 rend le numéro invalide (spécification DG TAXUD). Une regex ne calcule pas ce modulo 11 : elle vérifie la forme, puis il faut ajouter un contrôle de code. Complément à écrire après la regex : somme = Σ chiffre[i] × (9 − i) pour i de 0 à 7, valide si (somme − chiffre[8]) % 11 === 0 et si le numéro n'est pas « 000000000 », qui passe le modulo sans être un BSN. Les tentatives réelles relues ne gèrent pas toutes ces bornes : l'une exige exactement 9 chiffres sans rejeter les zéros, l'autre n'est pas ancrée et accepte « 111222333 » au milieu d'une phrase, une troisième s'arrête après 8 chiffres.

/^(?!0{9}$)\d{9}$/
passe 23/23 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?!0{9}$)\\d{9}$", "");
re.test(input);

Limites

  • Valide seulement la FORME (9 chiffres, pas tout à zéro) : ne calcule pas la clé elfproef. « 111222334 » et « 174559435 » ont la bonne forme et une clé fausse, et passent ce motif. Ajoutez le contrôle de code donné dans l'introduction.
  • Un BSN à 8 chiffres (zéro initial omis, selon des sources secondaires) est rejeté : complétez à 9 chiffres avec un zéro avant de valider, puis appliquez la regex. Les formes avec points ou espaces (« 1112.22.333 ») sont aussi rejetées : normalisez d'abord.
  • Ne dit rien de l'existence ni de l'attribution du numéro (seul le registre BRP le sait). Un BSN est une donnée personnelle sensible : n'utilisez en test que des numéros d'exemple ou synthétiques, comme ceux du corpus.

Pages liées