Regex Code personnel lituanien (asmens kodas)
L'asmens kodas a 11 chiffres : un chiffre de siècle et de sexe (1 à 6), l'année sur 2 chiffres, le mois (01-12), le jour (01-31), 3 chiffres de série et une clé modulo 11 identique à celle de l'Estonie (deux jeux de poids). La spécification DG TAXUD ne borne pas la série pour la Lituanie. validator.js réutilise pourtant la regex estonienne, qui limite la série à 001-710 : « 33309249990 », série 999, y est rejeté. django-localflavor se contente de « 11 chiffres ». Voici un motif qui borne siècle, mois et jour sans limiter la série, comparé à ces tentatives ; la clé et l'existence du jour restent à vérifier par du code.
/^[1-6]\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{4}$/passe 21/21 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js isTaxID (lt-LT, alias de et-EE) — série limitée à 001-710 : « 33309249990 » et tout asmens kodas de série supérieure à 710 sont rejetés ; mois et jour non bornés | ^[1-6]\d{6}(00[1-9]|0[1-9][0-9]|[1-6][0-9]{2}|70[0-9]|710)\d$ | 13 / 21 | sûr |
| django-localflavor (LTPersonalCodeField) — ancrée mais « 11 chiffres » seulement : « 99999999999 » et « 33313329990 » (mois 13, jour 32) passent | ^\d{11}$ | 16 / 21 | sûr |
| piigex (détecteur lt_asmens) — siècle 1-6 mais sans ancres de chaîne (« x-33309240064 » passe) ni borne de mois et jour | (?<!\d)[1-6]\d{10}(?!\d) | 17 / 21 | sûr |
Implémentation
const re = new RegExp("^[1-6]\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])\\d{4}$", "");
re.test(input);Limites
- Valide la forme (siècle, mois, jour) mais PAS la clé modulo 11 : « 33309240065 » passe. Même complément de code que pour l'Estonie (deux sommes pondérées, voir la fiche isikukood-estonien).
- Le jour 31 est accepté pour tous les mois et le 29 février pour toute année. La série n'est pas bornée, comme dans le document DG TAXUD.
- python-stdnum accepte aussi un premier chiffre 9 (personnes sans date de naissance connue ?) sans contrôle de date : le document DG TAXUD n'autorise que 1 à 6, et ce motif aussi. Si vous traitez des numéros commençant par 9, élargissez la classe.
- Un asmens kodas est une donnée personnelle : n'utilisez que les exemples du document officiel ou des numéros synthétiques à date de naissance future.