publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
12 skomentuj »

TAGI: php , pesel , programowanie

2010-07-12 08:38  |  Michał Beyer

Jak sprawdzić dane zawarte w numerze PESEL z wykorzystaniem PHP?

Jak sprawdzić dane zawarte w numerze PESEL z wykorzystaniem PHP?

Każdy obywatel przebywający na terenie Polski posiada numer PESEL. Różnorodne, często o specjalistycznym przeznaczeniu, usługi internetowe mogą wymagać jego podania. Warto więc więdzieć, na jakiej zasadzie jest on generowany i jak sprawdzić jego poprawność.

 

Analiza problemu

PESEL to akronim od nazwy „Powszechny Elektroniczny System Ewidencji Ludności". Składa się zawsze z 11-tu cyfr identyfikujących osobę fizyczną. Cały symbol numeryczny można podzielić na trzy części:

  • sześciu pierwszych cyfr określających datę urodzenia,
    • pierwsza i druga wskazuje na rok,
    • trzecia i czwarta miesiąc oraz stulecie,
    • ostatnie dwie dzień,
  • cyfr od siódmej do dziesiątej numer serii,
    • ostatnia z nich określa płeć,
  • ostatniej, cyfry kontrolnej, będącej wartością sumy kontrolnej wygenerowanego numeru.

Rozważmy więc następujący PESEL:

102704

2832

5


Pierwsze dwie cyfry przekazują informację, że mamy do czynienia z rokiem 10 konkretnego stulecia. Stulecie odczytujemy z kodowania następnej dwójki:

  • ich zapisanie w sposób naturalny wskazuje na lata od 1900 do 1999 roku. Dzieje się tak dla wartości od 01 do 12,
  • do numeru miesiąca dodawana jest liczba 20 dla lat od 2000 do 2099. Dzieje się tak dla wartości od 21 do 32,
  • do numeru miesiąca dodawana jest liczba 40 dla lat od 2100 do 2199. Dzieje się tak dla wartości od 41 do 52,
  • do numeru miesiąca dodawana jest liczba 60 dla lat od 2200 do 2299. Dzieje się tak dla wartości od 61 do 72,
  • do numeru miesiąca dodawana jest liczba 80 dla lat od 1800 do 1899. Dzieje się tak dla wartości od 81 do 92.

Co można zauważyć twórcy algorytmu zabezpieczyli się na wiele lat w przód.

Analizując nasz przypadek, można zauważyć, że liczba 27 wskazuje na siódmy miesiąc roku, a ponieważ do niego dodana jest wartość dwadzieścia, to cały numer będzie dotyczył pierwszego stulecia, drugiego tysiąclecia.

Cała część ciągu będzie wskazywać więc na 4 lipca 2010 roku.

Z drugiej sekwencji interesować nas będzie płeć. Zasada tu jest prosta. Cyfry parzyste oznaczają płeć żeńską, nieparzyste męską. Tak oto można wywnioskować, że w naszym przykładzie mamy do czynienia z kobietą.

Na przekór wszystkiemu bardzo ważnym aspektem jest wartość kontrolna. Pozwala ona na sprawdzenie poprawności całego numeru PESEL. Warto analizować podany ciąg, aby nie zwracać użytkownikowi niepoprawnych danych.

Sprawdzanie opiera się na przemnożeniu pierwszych dziesięciu cyfr przez z góry zdefiniowaną wagę, zsumowanie wyników, podzielenie modulo 10 (reszty z dzielenia przez 10) i odjęcie wyniku, także od liczby 10.

Wagi: 1 3 7 9 1 3 7 9 1 3
Przemnożone: (1*1) + (3*0) + (7*2) + (9*7) + (1*0) + (3*4) + (7*2) + (9*8) + (1*3) + (3*2) = 1 + 0 + 14 + 63 + 0 + 12 + 14 + 72 + 3 + 6 = 185
Wynik: 10 - (185 % 10) = 10 - 5 = 5
Cyfra kontrolna: 5

Jeżeli rezultat jest równy jedenastej cyfrze to numer PESEL jest poprawny.

«poprzednia 1 2 następna »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
12 skomentuj »

Komentarze

  • plh

    #1 plh 2010-07-12 11:49:28 0

    Niezmiernie ciekawe... implementacja algorytmu to jakieś 5 minut, napisanie artykułu zajęło pewnie z 4 razy więcej czasu.

    Takie sprawdzanie jest rzeczą tak banalną, że pisanie na ten temat więcej niż 3 zdań mija się z celem.

    IP: 94.75.108.[...] Opera/9.80 (Windows NT 5.1; U; en) Presto/2.6.30 Version/10.60

  • Artur

    #2 Artur 2010-07-12 16:52:33 0

    plh: Głupoty piszesz, żeby cokolwiek napisać?. Dobry materiał.

    IP: 87.207.240.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4

  • Kenjiro

    #3 Kenjiro 2010-07-13 09:16:46 0

    Wow, tworzyć całą klasę dla tylko trzech funkcji. Czy to nie armata na muchę? Gorąco dziś :P

    IP: 158.75.204.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:2.0b1) Gecko/20100630 Firefox/4.0b1

  • Singollo

    #4 Singollo 2010-07-13 13:06:31 0

    @Kenjiro: Czasem tworzy się caaaałą klasę dla jednej funkcji. Albo nawet dla dwóch pól, bez metod.

    IP: 78.8.147.[...] Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 SUSE/5.0.372.0-1.1 (KHTML, like Gecko) Chrome/5.0.372.0 Safari/533.4

  • crush

    #5 crush 2010-07-15 16:48:00 0

    a przypadków np. 44444444444 nie obsługuje - a taki PESEL nie istnieje

    IP: 82.210.138.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6

  • mariobros

    #6 mariobros 2010-07-16 19:05:12 0

    http://rundown.pl/Artykuly/Cywilizacja/PESEL-wszystko-co-o-nim-mozesz-wiedziec.php

    IP: 193.93.91.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 GTB7.1

  • Olsza

    #7 Olsza 2010-07-23 13:34:16 0

    jeszcze za czasów studiów napisany skrypt, który po wpisaniu nr pesel podaje różne informacje, m.in. w jakim dniu tygodnia dana osoba się urodziła, ile dni minęło, ...

    Zapraszam na http://pesel.olsza.info/

    IP: 217.17.32.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4

  • cojack

    #8 cojack 2010-07-24 01:21:06 0

    http://pl.wikipedia.org/wiki/PESEL

    szału nie robicie, ostatnio widze że webhosting ma co raz to gorsze artykuły, czy już nikt nie dba o jakość? Tylko na ilość lecimy?

    IP: 89.79.56.[...] Mozilla/5.0 (X11; U; Linux x86_64; pl-PL; rv:1.9.2.7) Gecko/20100716 Ubuntu/10.04 (lucid) Firefox/3.6.7

  • Marcin Kosedowski

    #9 Marcin Kosedowski 2010-08-01 11:51:57 0

    Warto zauważyć, że walidowanie numeru PESEL nie zawsze da poprawny wynik. W szczególności dotyczy to dwóch przypadków: błędnej sumy kontrolnej, które na początku wyliczane były ręcznie (problem kilku tysięcy osób!) i możliwości "przepełnienia" licznika dla urodzonych w tym samym dniu.

    Takich sytuacji, które myślącemu zdroworozsądkowo programiście w życiu nie przyszłyby do głowy są jest znacznie więcej. Zachęcam do przeczytania komentarzy na moim blogu pod wpisem dotyczącym błędów w numerze PESEL.

    IP: 89.78.187.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4

  • yahuto

    #10 yahuto 2010-08-04 13:23:54 0

    artykuł łącznie z komentarzami jest bardzo ciekawy.

    IP: 217.113.233.[...] Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; pl-pl) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8

  • fifi

    #11 fifi 2010-08-24 13:47:47 0

    Implementacja tego validatora nie ma sensu, urzędowo wprowadzono do obiegu szereg nr PESEL które są błędne

    http://pl.wikipedia.org/wiki/PESEL patrz Cechy specyficzne algorytmu sprawdzania

    IP: 87.239.221.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.126 Safari/533.4

  • Romek

    #12 Romek 2011-12-03 03:28:40 0

    Skrypt Olszy jest dość marny bo traktuje numer PESEL jako parwidłowy i go rozkodowuje do takich danych:

    "Twój nr PESEL 12201132396 zdradza:

    Twoja płeć to Mężczyzną

    Urodziłeś się 11-00-2012 r. i był to dzień tygodnia Niedziela

    Był to 11 dzień roku w 2012r.

    oraz 11-00-2012 był to 734513 dniem od początku naszej ery

    Rok 2012 jest rokiem przestępny

    Żyjesz -39 dni

    Twoja liczba zakodowana jako numer seryjny to 3239

    Jakoś nie wspomina że miesiąc 00 nie istnieje więc PESEL musi być fałszywy.

    IP: 83.22.192.[...] Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł