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)