Rexact
Cheatsheet

Regex PESEL polonais

Un PESEL a 11 chiffres : AAMMJJ, 4 chiffres de série et une clé. Subtilité rarement respectée : le mois encode le siècle par un décalage (+80 pour 1800-1899, +20 pour 2000-2099, +40 pour 2100-2199, +60 pour 2200-2299), donc les mois valides sont 01-12, 21-32, 41-52, 61-72 et 81-92. La bibliothèque PII de Microsoft Presidio a la bonne alternance mais n'ancre pas le motif, donc un numéro à 12 ou 13 chiffres qui contient un PESEL passe. validator.js se contente de « 10 ou 11 chiffres », mois 13 compris. Voici un motif ancré qui borne le mois selon le siècle et le jour de 01 à 31, comparé à ces tentatives.

/^[0-9]{2}(?:[02468][1-9]|[13579][012])(?:0[1-9]|[12][0-9]|3[01])[0-9]{5}$/
passe 24/24 cas

Comparatif des patterns existants

Implémentation

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

Limites

  • Valide seulement la FORME : ne calcule pas la clé (poids 1-3-7-9). « 44051401358 » et « 02070803629 » ont la bonne forme mais une clé fausse, et passent ce motif. Ne valide pas non plus le jour dans le mois : « 02223013623 » (30 février 2002) passe, tout comme un 29 février d'une année non bissextile.
  • Ne vérifie pas la cohérence du sexe (le dernier chiffre de la série est pair pour une femme, impair pour un homme) ni l'existence réelle du numéro : seul le registre PESEL le confirme. N'utilisez jamais de vrais PESEL dans vos tests ; les exemples ici viennent de documents officiels et de suites de tests.
  • À cause du décalage de siècle, tester simplement « mois ≤ 12 » rejetterait tous les PESEL des personnes nées depuis 2000 (mois 21 à 32). Ce motif accepte ces mois, ainsi que ceux des siècles 1800, 2100 et 2200.
  • Accepte 11 chiffres collés, sans espace ni tiret : « 02 070 803628 » est rejeté, normalisez la saisie avant validation.

Pages liées