Nowy rok, nowy kod - walidacja PESEL
Szczęśliwego Nowego Roku!
Ładnie jest zacząć nowy rok jakimś merytorycznym wpisem. Zazwyczaj w tym okresie na wszelkiej maści blogach panuje przysłowiowe pitu pitu, a Ja się wyłamię i na początek roku dam troszkę kodu.
W tygodniu poświątecznym, rejestrując się na jakiejś stronie byłem zobowiązany podać numer PESEL. Jak zawsze, podałem bliżej nieokreślony ciąg cyfr... ale tym razem napis Nieprawidłowy numer PESEL nie chciał zniknąć. Walidacja okazała się na tyle skuteczna, że w końcu znużony, podałem prawdziwy numerek. Przy okazji pomyślałem, że przydałoby się widzieć, jak to działa. Wikipedia, Google i mam - dwie różne implementacje - metodą podręcznikową i skróconą.
Sama funkcja jest mało skomplikowana, więc nie zasługuje na notkę. Po ujęciu w klasę i dodaniu kilku funkcjonalności otrzymujemy gotowy komponent dla dowolnego walidatora.
Klasa potrafi:
Jest to znów kod biblioteczny, więc jest nieco bardziej rozbudowany, niż wymaga tego samo sprawdzenie numeru PESEL. Zrezygnowałem z wyjątków, bo (moim zdaniem) nie przydadzą się przy walidacji - lepiej, żeby główny walidator obsłużył błędy sam.
Klasę i kilka przykładów znajdziesz w tym katalogu.
Na koniec nieśmiertelna formułka - jeśli znajdziesz błąd, uważasz, że coś można zrobić inaczej lub lepiej, to prosze o kontakt ideaheveme na gmail kropka com, lub pozostawienie komentarza :)
Ładnie jest zacząć nowy rok jakimś merytorycznym wpisem. Zazwyczaj w tym okresie na wszelkiej maści blogach panuje przysłowiowe pitu pitu, a Ja się wyłamię i na początek roku dam troszkę kodu.
W tygodniu poświątecznym, rejestrując się na jakiejś stronie byłem zobowiązany podać numer PESEL. Jak zawsze, podałem bliżej nieokreślony ciąg cyfr... ale tym razem napis Nieprawidłowy numer PESEL nie chciał zniknąć. Walidacja okazała się na tyle skuteczna, że w końcu znużony, podałem prawdziwy numerek. Przy okazji pomyślałem, że przydałoby się widzieć, jak to działa. Wikipedia, Google i mam - dwie różne implementacje - metodą podręcznikową i skróconą.
Sama funkcja jest mało skomplikowana, więc nie zasługuje na notkę. Po ujęciu w klasę i dodaniu kilku funkcjonalności otrzymujemy gotowy komponent dla dowolnego walidatora.
Klasa potrafi:
- Walidować poprawność numeru PESEL
- Wyłuskać datę w formacie YYYYMMDD (to nie takie proste jak się wydaje)
- Porównać datę znalezioną w PESELu z inną - podaną w formacie YYYYMMDD
- Sprawdzić płeć osoby, do której należy numer
Jest to znów kod biblioteczny, więc jest nieco bardziej rozbudowany, niż wymaga tego samo sprawdzenie numeru PESEL. Zrezygnowałem z wyjątków, bo (moim zdaniem) nie przydadzą się przy walidacji - lepiej, żeby główny walidator obsłużył błędy sam.
Klasę i kilka przykładów znajdziesz w tym katalogu.
Na koniec nieśmiertelna formułka - jeśli znajdziesz błąd, uważasz, że coś można zrobić inaczej lub lepiej, to prosze o kontakt ideaheveme na gmail kropka com, lub pozostawienie komentarza :)


public function isFemale(){
return !$this->isMale();
}
Po co dwa takie same kawałki kodu?
Pełny algorytm weryfikacji numeru PESEL jest trochę bardziej skompilowany. Zapomniałeś wprowadzić np takie testy:
- test ilości dni w miesiącu urodzenia
- wykluczenie nr PESEL 00000000000, który jest poprawny wg skróconych algorytmów
- jeżeli ktoś urodził sie w 18XX to numer miesiąca oznaczany jest cyframi od 81 do 92, jeżeli ktoś urodził się w 20XX to numer miesiąca oznaczany jest cyframi od 21 do 32 a wiec trzeba wziąć pod uwagę inne oznaczenia miesięcy
- itp.
Mariusz Dalewski
http://aiv-dev.info