Kontrola rodného čísla

Jednoduchá kontrola správnosti rodného čísla, jehož přidělování se řídí jistými pravidly.

© Jaroslav Reichl, 2008

Příprava pro vykreslení grafu

RodneCislo[rc_]:={

chybovahlaska="";
dalsipostup=True;
cislicerc=ToExpression[Characters[rc]];
delka=StringLength[rc];
If[delka==10∨delka==9,
{rok=10*cislicerc[[1]]+cislicerc[[2]],
mesic=10*cislicerc[[3]]+cislicerc[[4]],
den=10*cislicerc[[5]]+cislicerc[[6]],
If[delka==9,
{cislicerc=Append[cislicerc,0],
cislicerc[[10]]=cislicerc[[9]],
cislicerc[[9]]=0}]},
{chybovahlaska="Rodné číslo nemá požadovaný počet číslic!",
dalsipostup=False}];
If[dalsipostup,
If[mesic≥1 &&mesic≤12,
pohlavi=0,
If[mesic≥50 &&mesic≤62,
{pohlavi=50,
mesic=mesic-50},
{chybovahlaska="Měsíc zadaný v rodném čísle není v požadovaném tvaru.",
dalsipostup=False}]]];
If[dalsipostup,
If[den<1∨den>31,
{chybovahlaska="Den zadaný v rodném čísle neexistuje.",
dalsipostup=False}]];
If[dalsipostup,
If[((mesic==1∨mesic==3∨mesic==5∨mesic==7∨mesic==8∨mesic==10∨mesic==12)&&den≤31)∨((mesic==4∨mesic==6∨mesic==9∨mesic==11)&&den≤30)∨(mesic==2&&Mod[rok,4]==0&&den==29)∨(mesic==2&&Mod[rok,4]≠0&&den==28),
{soucet=rok+mesic+pohlavi+den+10*cislicerc[[7]]+cislicerc[[8]]+10*cislicerc[[9]]+cislicerc[[10]],
If[Mod[soucet,11]==0,
{chybovahlaska="Rodné číslo je správné!",
okrc=True},
{chybovahlaska="Rodné číslo je syntakticky dobře, ale není platné!",
okrc=False}]},
{chybovahlaska="Počet dnů v daném měsíci není zadán v rodném čísle dobře.",
dalsipostup=False}]];
Print[chybovahlaska]
If[dalsipostup,
If[ToExpression[DateString["YearShort"]]<rok,
rok=rok+1900,
If[DateDifference[StringJoin[ToString[mesic]," ",ToString[den]],DateString[{"Month"," ","Day"}]]≥0,
rok=rok+2000,
{Print["Datum narození ještě nenastalo!"],
dalsipostup=False}]]];
If[dalsipostup,
If[okrc,
If[pohlavi==0,
Print["Rodné číslo patří muži, který se narodil ",den,". ",mesic,". ",rok,"."],
Print["Rodné číslo patří ženě, která se narodila ",den,". ",mesic,". ",rok,"."]],
If[pohlavi==0,
Print["Rodné číslo by patřilo muži, který se narodil ",den,". ",mesic,". ",rok,"."],
Print["Rodné číslo by patřilo ženě, která se narodila ",den,". ",mesic,". ",rok,"."]]]]
}

Spuštění kontroly
Zadejte místo níže uvedeného rodného čísla "to svoje" a buňku po zadání běžným způsobem zpracujte. Na dotaz, který se objeví, odpovězte ANO.
Pozor! Rodné číslo je nutno zadat do uvozovek (jak je vidět ve vzoru)!

RodneCislo["5511220110"]