Rexact
Cheatsheet

Regex numéro d'identité sud-africain

Un numéro d'identité sud-africain a 13 chiffres : AAMMJJ, 4 chiffres de série (sexe), un chiffre de citoyenneté, un 12e chiffre et une clé Luhn. Le 12e chiffre vaut normalement 8, et 9 quand la série du jour est épuisée, selon un amendement réglementaire de 2000 : une regex de Microsoft Q&R le force à 8 et rejette donc des numéros valides. La règle de citoyenneté est aussi mal gérée : 0 ou 1 dans le texte réglementaire, 2 pour les réfugiés dans les bibliothèques. Voici un motif qui borne mois et jours, accepte 0 à 2 en citoyenneté et ne force pas le 12e chiffre, comparé à ces tentatives.

/^[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12][0-9]|3[01])[0-9]{4}[0-2][0-9][0-9]$/
passe 22/22 cas

Comparatif des patterns existants

Implémentation

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

Limites

  • Valide seulement la FORME : ne calcule pas la clé Luhn (13e chiffre), ne vérifie pas le jour dans le mois ni les années bissextiles (« 0002305009082 », un 30 février, passe), et ne connaît pas le siècle : AAMMJJ est ambigu (« 0402290001187 » est valide comme 29 février 2004, pas comme 1904).
  • Le 12e chiffre vaut normalement 8, et 9 quand la série du jour est épuisée (amendement de 2000). Les anciens numéros peuvent porter d'autres valeurs : le motif accepte n'importe quel chiffre pour ne pas rejeter de numéros valides, au prix de ne pas contrôler cette position.
  • La citoyenneté 0 ou 1 vient du texte réglementaire (copie secondaire consultée, la Gazette étant protégée) ; 2 (réfugié) vient de Wikipédia et de bibliothèques tierces. Le motif accepte 0 à 2 : si vous suivez strictement le texte de 1998, restreignez à [01].
  • Les numéros du corpus sont synthétiques, avec une clé Luhn recalculée : aucun jeu d'exemples officiel n'existe. N'utilisez jamais de vrais numéros d'identité dans vos tests. L'existence réelle d'un numéro ne peut être confirmée que par le Département des Affaires intérieures.

Pages liées