Rexact
Cheatsheet

Regex numéro Aadhaar indien

Un numéro Aadhaar a 12 chiffres, écrits en général en trois groupes de 4 séparés par des espaces (« 2341 2341 2346 »). Le dernier chiffre est une clé calculée par l'algorithme de Verhoeff. Le document de conception de l'UIDAI de 2010 (une proposition, pas un texte réglementaire) réserve le premier chiffre 0 à une extension future et 1 aux entités, et prévoit les numéros de 2 à 9 pour les personnes ; python-stdnum applique la même borne. Parmi les motifs relus ici, validator.js accepte encore un « 1 » en tête, django-localflavor accepte aussi le 0 et le tiret, et les deux motifs de Presidio, conçus pour détecter, ne sont pas ancrés. Voici un motif qui borne le premier chiffre et impose un séparateur identique entre les groupes, comparé à ces tentatives.

/^[2-9][0-9]{3}( ?)[0-9]{4}\1[0-9]{4}$/
passe 23/23 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[2-9][0-9]{3}( ?)[0-9]{4}\\1[0-9]{4}$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne calcule pas la clé Verhoeff. « 234123412347 » a la bonne forme mais une clé fausse et passe ce motif ; le test Verhoeff se fait dans le code, pas dans une regex.
  • La borne « premier chiffre de 2 à 9 » vient d'un document de conception de l'UIDAI (2010) et de python-stdnum, pas d'un texte réglementaire que j'ai pu ouvrir. Les numéros palindromes (« 222222222222 »), que python-stdnum rejette, passent aussi.
  • Seul l'espace sert de séparateur (celui de l'écriture habituelle par groupes de 4) : le tiret accepté par django-localflavor et le deux-points de Presidio sont refusés ; normalisez avant validation.
  • N'établit pas qu'un numéro a été attribué. Le numéro est une donnée personnelle sensible en Inde : n'utilisez dans vos tests que des numéros synthétiques à clé valide comme ceux du corpus.

Pages liées