Úloha 11: Ověření rodného čísla (RČ)
Cíl úlohy
Vytvořte funkci a formulář pro ověření platnosti českého a slovenského rodného čísla. Skript musí zkontrolovat syntaktický formát (s lomítkem i bez), ověřit kalendářní existenci data narození (včetně rozlišení mužů a žen) a pro desetimístná RČ ověřit kontrolní číslici dělitelností 11.
Struktura rodného čísla a kontrolní číslice
Rodné číslo má tvar RRMMDD/CCCC (devítimístné do roku 1953, desetimístné od 1. 1. 1954):
- RR: Poslední dvojčíslí roku narození.
- MM: Měsíc narození. U žen je k měsíci přičteno
50(od roku 2004 v případě vyčerpání kapacit i20u mužů a70u žen). - DD: Den v měsíci (01–31).
- CCCC: Koncovka. Desátá číslice je kontrolní: celé devítimístné číslo složené z
RRMMDDCCCmusí mít po dělení 11 zbytek rovný desáté číslici (pokud je zbytek 10, desátá číslice je 0).
Úvahy a doporučený postup řešení
- Regulární výraz: Pro rozparsování vstupu použijte funkci
preg_match(), která umožní zadat rodné číslo s mezerami, lomítkem nebo bez něj. - Kontrola data: V PHP máme k dispozici vestavěnou funkci
checkdate($mesic, $den, $rok). Před jejím voláním musíte od měsíce odečíst 50 (u žen) a správně určit století (např. 98 znamená 1998, 05 znamená 2005). - Dělitelnost 11: Operátor modulo
%v PHP provede výpočet zbytku po celočíselném dělení.
Doplňující otázky k zamyšlení a náměty na rozšíření
- 1. Jak z platného rodného čísla jednoduše zjistit pohlaví a přesný věk v rocích k dnešnímu dni?
- 2. Proč nelze ověřit kontrolní číslici u devítimístných rodných čísel vydaných před rokem 1954?
- 3. Proč se v moderních systémech a legislativě EU doporučuje rodná čísla nahrazovat bezvýznamovými identifikátory (BSI / klientskými identifikátory)?
Vyzkoušejte funkční řešení: Otevřít vzorovou úlohu overeni_rc.php