Rexact
Cheatsheet

Regex Indian Aadhaar number

An Aadhaar number has 12 digits, usually written as three groups of 4 separated by spaces ('2341 2341 2346'). The last digit is a check digit computed with the Verhoeff algorithm. The UIDAI design paper of 2010 (a proposal, not a regulation) reserves a first digit of 0 for future extension and 1 for entities, and plans numbers from 2 to 9 for individuals; python-stdnum applies the same bound. Among the patterns read here, validator.js still accepts a leading '1', django-localflavor also accepts 0 and the hyphen, and the two Presidio patterns, built for detection, are not anchored. Here's a pattern bounding the first digit and requiring the same separator between groups, compared against those attempts.

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

Comparison of existing patterns

Implementation

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

Limits

  • 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.

Related pages