Rexact
Cheatsheet

Regex Lithuanian personal code (asmens kodas)

The asmens kodas has 11 digits: a century and sex digit (1 to 6), the year on 2 digits, the month (01-12), the day (01-31), 3 serial digits and a modulo 11 key identical to Estonia's (two weight sets). The DG TAXUD specification does not bound the serial for Lithuania. validator.js nonetheless reuses the Estonian regex, which limits the serial to 001-710: '33309249990', serial 999, is rejected. django-localflavor settles for '11 digits'. Here's a pattern bounding century, month and day without limiting the serial, compared against those attempts; the key and the existence of the day are left to code.

/^[1-6]\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{4}$/
passes 21/21 cases

Comparison of existing patterns

Implementation

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);

Limits

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

Related pages