Tema: Re: CROSS, REQ: asmens kodo validavimo regexp
Autorius: Laimis
Data: 2016-01-13 21:31:30
zZz rašė:
> Lietuviško asmens kodo šabloną.


Pats paprasčiausias (POSIX; veiks praktiškai visur, nors dar nepaminėjai 
programavimo kalbos/aplinkos, kurioje regexp'as turi veikti) gali būti toks:

[3-6][0-9]{2}[0,1][0-9][0-9]{2}[0-9]{4}

Tačiau datų teisingumo jis netikrina, tad praeis ir 00 mėnuo/diena ir
19 mėnuo ir 99 diena.

Sudėtingesnis (negali būti akivaizdžiai neteisingų mėnesių/dienų; mėnuo: 
01-12, diena: 01-31; eilės nr. negali būti 000) ir jau PCRE (Perl 
Compatible RegExp):

\b
(?<lytis>[3-6])
(?<metai>[0-9]{2})
(?<mėnuo>0[1-9]|1[0-2])
(?<diena>0[1-9]|1-2[0-9]|3[0-1])
(?<seqno>(?!000)[0-9]{3})
(?<ctlno>[0-9])
\b


Named capture grupės (visi struktūriniai AK elementai) — tolimesnio 
tikrinimo/apdorojimo patogumui.
Belieka patikrinti datos realumą (ar tam tikrų metų tam tikras mėnuo 
gali turėti 29-31 d.) ir kontrolinį skaičių (kurį dar reikia 
apskaičiuoti; google it)