like a geek

Numer PESEL to pomyłka

dziewczyna nic nie robi przy komputerze

Idealny świat programistów psuje się na takich prostych rzeczach jak sprawdzenie poprawności numeru PESEL. Zamiast się w to bawić, lepiej iść na kawę.

Marcin Kosedowski, foto: Ivan Marianelli

Niedawno stwierdziłem, że maklerzy giełdowi powinni zająć się piciem kawy i oddać władzę nad giełdą komputerom. Zasugerowałem, że można by wyeliminować część błędów przez sprawdzanie poprawności wpisywanych przez nich danych. Właściciele giełdy powinni wziąć do tego jakiegoś gimnazjalistę, który za dwie dychy napisze walidator i zapobiegnie milionowym stratom.

To był głupi pomysł.

Reklama Środki antykoncepcyjne kupuję zawsze w aptece internetowej apteka-zielona.pl

O czym mówi numer PESEL?

W komentarzach wyszedł prostszy przykład niż giełda - numery PESEL. Każdy gimnazjalista wie, że to 11-cyfrowy, stały symbol numeryczny, jednoznacznie identyfikujący określoną osobę fizyczną. Jako że jest to cytat z Wikipedii, w dodatku wyrwany z kontekstu, to nie ma w nim grosza prawdy. Nie jest ani stały, ani jednoznacznie identyfikujący określoną osobę. Nie jestem nawet pewien, czy musi to być numer.

Większość osób wie, że PESEL zaczyna się od daty urodzenia. Po niej następuje unikalna liczba porządkowa, identyfikator płci i cyfra kontrolna, obliczana za pomocą algorytmu Luhna. Pomińmy fakt, że nie ma on sensu w PESEL-u, gdyż nie wykrywa zamiany dnia i miesiąca urodzenia.

Przy wypełnianiu formularzy łatwo sprawdzić czy PESEL jest poprawny. Programista może łatwo porównać datę z początkiem numeru i płeć z jego dziesiątą cyfrą (parzyste dla kobiet, nieparzyste dla mężczyzn).

Niestety, to co napisałem powyżej to stek kłamstw.

Błędy w numerze PESEL

W rzeczywistości poprawności PESEL-u nie da się sprawdzić. Są osoby o błędnie wyliczonych cyfrach odpowiadających dacie urodzenia (rok 1900 i 2000), chociaż poprawia się ten błąd. Co jednak zrobić z gościem, któremu zmieniła się data urodzenia? Czy normalny programista wpadłby na takie szaleństwo? Programista nie, ale politycy – tak. Takie akcje zdarzają się przy każdej zmianie w systemie emerytalnym itp. To samo z płcią - ona też może się zmienić. W systemie PESEL trzeba w takiej sytuacji poprawić numer.

A co, jeśli okaże się, że cała pula identyfikatorów przeznaczona na dany dzień (5000 dla każdej płci) została zużyta? Nie musi nawet nagle urodzić się 8 razy więcej dzieci niż zwykle. Wystarczy zmiana w ustawie, po której dużej liczbie osób opłaci się postarzeć o rok i przypomną sobie, że jednak urodzili się pewnej zimowej nocy, 31 grudnia roku pozwalającego na przejście na wcześniejszą emeryturę, a przez zamienicie zgłoszenie urodzin zajęło aż miesiąc. Jeśli unikalnych identyfikatorów nie starczy dla wszystkich (to tylko 5000 na płeć na dzień!), zostanie im przyznany numer z kolejnego dnia.

Z samą unikalnością też jest problem, gdyż zdarzają się duplikaty PESEL-i. Jednoznaczna identyfikacja to kolejny wymysł myślących zero-jedynkowo informatyków - idealistów. Numery mogą się powtarzać, więc nie nadają się do użycia jako klucze główne w bazach danych. W dodatku można je zmienić. Co jeśli zajdzie potrzeba wyszukania osoby, która miała dany pesel w lipcu 2003 roku, nawet jeśli teraz ma inny (np. do przyporządkowania umów do pracowników).

Nawet cyfra kontrolna może być błędna. Kiedyś obliczało się je ręcznie, a wiadomo, że dodawanie i dzielenie modulo 10 to niezmiernie skomplikowane operacje, podczas których powstało kilka tysięcy błędów.

Jak wyeliminować błędy PESEL-u?

W PESEL-u, zarówno z powodu złych założeń (w ciągu dnia nie urodzi się więcej niż 5000 osób tej samej płci) i błędów użytkowników (ręczne obliczanie cyfry kontrolnej), nie powinno się ufać żadnej z danych i przepuszczać nawet błędne numery. Walidacja formularzy i baz danych nie ma w tym przypadku sensu. Zamiast zmuszać do tego programistę, lepiej wysłać go na kawę. Nie będzie musiał robić kolejnych obejść kiedy pojawi się pierwszy użytkownik, który według systemu nie powinien istnieć.

Możemy co najwyżej sprawdzić, czy numer PESEL jest faktycznie numerem, tzn. czy składa się z cyfr. Nie słyszałem jeszcze o błędach typu wpisanie litery O zamiast cyfry 0, ale nie zdziwiłbym się, gdyby taki się pojawił, kiedy pani Krysia zahaczy tipsem o zły klawisz. Programista może więc w ciągu 10 sekund napisać wyrażenie regularne wyszukujące znaki inne niż cyfry i z czystym sumieniem zająć się piciem kawy.

Reklama Inwestowanie na giełdzie? Przekonaj się jak inwestować z zyskiem!

Wniosek jest prosty: zamiast pracować nad wykrywaniem błędów użytkownika, lepiej wysłać na kawę zarówno jego jak i programistę. Jeśli nie będzie próbował poprawiać błędów, to przynajmniej nie zepsuje całego systemu.

Jeśli więc szukasz perspektywicznego kierunku studiów - wybierz branże kawową. Kiedy w przyszłości wyeliminujemy z systemu tego wrednego użytkownika i ograniczymy pracę programisty, to spożycie kawy wzrośnie. Tak jak zarobki w tej branży.

skomentuj

Komentarze są własnością użytkowników. Zastrzegam sobie prawo do ich usuwania, jeśli uznam je za nieodpowiednie. Więcej w polityce prywatności.