algorytm.org

PESEL

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

PESEL
Ocena użytkowników:***** / 77
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 06 października 2005 18:46

Zgodnie z informacją zamieszczoną na stronach rządowych Rejestr PESEL – Powszechny Elektroniczny System Ewidencji Ludności prowadzony jest od 1979 roku i zawiera dane osób przebywających stale na terytorium RP, zameldowanych na pobyt stały lub czasowy trwający ponad 2 miesiące a także osób ubiegających się o wydanie dowodu osobistego lub osób, dla których odrębne przepisy przewidują potrzebę posiadania numeru PESEL.

Budowa numeru PESEL jest następująca:
  • cyfry 1-2 to ostatnie dwie cyfry roku urodzenia
  • cyfry 3-4 to dwie cyfry miesiąca urodzenia
  • cyfry 5-6 to dwie cyfry dnia urodzenia
  • cyfry 7-10 liczba porządkowa z oznaczeniem płci (liczba parzysta - kobieta, liczba nieparzysta - mężczyzna)
  • cyfra 11 suma kontrolna

Jak zapewne zauważyłeś zapis taki nie pozwoliłby na rozróżnienie osób urodzonych w latach np. 1999 i 1899. Dlatego też dla odróżnienia do numeru miesiąca dodawane są następujące wartości:
  • dla lat 1800 - 1899 - 80
  • dla lat 1900 - 1999 - 0
  • dla lat 2000 - 2099 - 20
  • dla lat 2100 - 2199 - 40
  • dla lat 2200 - 2299 - 60

Tak więc początek numeru PESEL osoby urodzonej 10 lutego 1899 roku będzie wyglądał tak: 998210... a osoby urodzonej 10 lutego 1999 roku tak: 990210...
Teraz została nam jeszcze sprawa obliczania sumy kontrolnej. Każdą pozycję numeru ewidencyjnego mnoży się przez odpowiednią wagę, są to kolejno: 1 3 7 9 1 3 7 9 1 3. Następnie utworzone iloczyny dodaje się i wynik dzieli się modulo 10. Wynik ten należy odjąć od 10 i znów podzielić przez modulo 10 (to zabezpieczenie gdybyśmy w poprzednim kroku otrzymali 10).

Przykład:

Rozważmy PESEL osoby urodzonej 8 lipca 1902 roku, płci żeńskiej (parzysta końcówka numeru z serii – 0362). Czyli mamy wówczas 0207080362. Teraz kolejne cyfry należy przemnożyć przez odpowiednie wagi i dodać do siebie.
0*1 + 2*3 + 0*7 + 7*9 + 0*1 + 8*3 + 0*7 + 3*9 + 6*1 + 2*3 = 0 + 6 + 0 + 63 + 0 + 24 + 0 + 27 + 6 + 6 = 132
Wynik dzielimy modulo przez 10.
132 mod 10 = 2
A następnie odejmujemy od 10
10 - 2 = 8.
I wynik dzielimy znów modulo 10
8 mod 10 = 8
Cyfra kontrolna to 8, zatem nasz prawidłowy numer PESEL to: 02070803628

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC/C++
.cpp
.cpp
***** / 11
Tomasz LubińskiDelphi/Pascal
.pas
.pas
***** / 4
Tomasz LubińskiJava
.java
.java
***** / 18
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie

Poprawiony: 29 sierpnia 2012 20:05
Komentarze
photo
-8 # Barti 2009-09-03 13:21
"cyfry 7-10 liczba porządkowa z oznaczeniem płci (liczba parzysta - kobieta, liczba nieparzysta - mężczyzna)"
Niestety to chyba nie do końca się sprawdza, moja dziewczyna ma w dowodzie \"081\" w przedziale 7-10 cyfra...
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Matma+ 2014-01-07 13:13
Cytuję Barti:
"cyfry 7-10 liczba porządkowa z oznaczeniem płci (liczba parzysta - kobieta, liczba nieparzysta - mężczyzna)"
Niestety to chyba nie do końca się sprawdza, moja dziewczyna ma w dowodzie \"081\" w przedziale 7-10 cyfra...


A od kiedy to 7-10 cyfra to tylko 3 cyfry?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Tomek 2009-09-03 18:46
Oj chyba coś pokręciłeś bo cyfr na pozycjach 7-10 jest cztery, a Ty wypisałeś trzy.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-6 # Joanna 2010-03-12 21:06
Tu chodzi o cyfrę 7 i 10
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # sho 2013-04-09 18:53
nie... od 7 do 10 i tak naprawde wystarzy sama 10 liczba...
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Tomek29kce 2016-05-11 07:18
Oczywiście każda cyfra jest również liczbą, ale bardziej poprawnie byłoby napisać 10-ta cyfra, a nie liczba.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-3 # Ali 2010-04-02 13:40
W na stronie MF jest informacja o modulo 11 - to by się bardziej zgadzało z odejmowaniem od 10. Poza tym wyniku odejmowania 10 - modulo nie trzeba nie trzeba dzielić modulo.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Tomasz Lubiński 2010-04-02 14:08
Eeee pokręciłeś chyba z numerem NIP, tam faktycznie wynik sumy ważonej dzieli się modulo 11. W PESEL dzieli się modulo 10, zresztą policz sobie swój numer PESEL jeżeli użyjesz dzielenia modulo 11 wyliczysz złą cyfrę kontrolną.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Inka 2011-05-29 00:09
Mam problem z obliczeniem. Wydaje mi się, że wszystko dobrze liczę, ale wynik - trzy, nie chce wyjść. Pesel na 100% prawidłowy. Po pomnożeniu przez wagi wychodzi 144. Co dalej?
PESEL: 84040206943
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-2 # Romek 2011-09-24 00:51
Cytuję Inka:
Mam problem z obliczeniem. Wydaje mi się, że wszystko dobrze liczę, ale wynik - trzy, nie chce wyjść. Pesel na 100% prawidłowy. Po pomnożeniu przez wagi wychodzi 144. Co dalej?
PESEL: 84040206943

1*8 + 3*4 + 7*0 + 9*4 + 1*0 + 3*2 + 7*0 + 9*6 + 1*9 + 3*4 = 8 + 12 + 0 + 36 + 0 + 6 + 0 + 54 + 9 + 12 = 137
A mnie suma wychodzi 137, więc po odjęciu (137 mod 10 = 7) 10-7=3. Tak więc cyfra kontrolna się zgadza.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Joe Chal 2012-10-27 13:12
Czy jest prawda aby w Peselu był lub mógłby być również wkomponowany tajny kod oznaczający pochodzenie?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-2 # Tomasz Lubiński 2012-10-27 13:14
Teoretycznie w każdy numer identyfikacyjny możesz coś wkodować, chociażby w numer rejestracyjny auta, PESEL (ale tylko 4 cyfry bo pozostałe to data urodzenia i cyfra kontrolna), numer dowodu osobistego, itp...
Tyle, że moim zdaniem to tylko jedna z miejskich legend...
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-2 # sasiad252 2013-04-29 13:45
suma kontrolna sie nie zgadza.mam na koncu w peselku "5" a w/g obliczen kolegi wyszlo mi 4....
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Romek 2014-05-03 13:19
Więc według obliczeń kolegi jesteś kobietą

Licz sam i na siebie
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # padamcz1 2014-02-24 10:50
Implementacja w Oracle bez tworzenia funkcji:

SELECT
mod(10-mod(SUBSTR(REGE XP_REPLACE( PESEL,'[^[:digit:]]',''),1,1)*1+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),2,1)*3+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),3,1)*7+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),4,1)*9+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),5,1)*1+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),6,1)*3+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),7,1)*7+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),8,1)*9+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),9,1)*1+
SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),10,1)*3
,10),10) AS VAL, SUBSTR(REGEXP_R EPLACE( PESEL,'[^[:digit:]]',''),11,1) AS CHECK_SUM,
PESEL from table;
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # sjd 2015-02-13 11:22
Jest bardzo duzo blednie wpisanych PESEL w dokumentach poniewaz dawniej urzednicy liczyli sumy kontrolne "na piechote" i czesto sie mylili zarowno w obliczeniach jak w interpretacji algorytmu. Stad ktos moze miec wpisany w dokumentach PESEL ktory nie przejdzie validacji.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Yaroshi 2016-09-20 08:13
Witam.
A co w przypadku osob z data urodzenia djamy na to 1899.11.10 ? Czyli pesel 99811... ?? :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Tomasz Lubiński 2017-04-13 14:59
Nie, PESEL zaczynałby się 9991, bo do miesiąca 11 dodajemy 80, czyli mamy na pozycji miesiąca liczbę 91.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # BRW 2016-12-23 15:51
I tak coś tu w tym zapisie musi być nie halo, bo zapisali, że:
"Jak zapewne zauważyłeś zapis taki nie pozwoliłby na rozróżnienie osób urodzonych w latach np. 1999 i 1899. Dlatego też dla odróżnienia do numeru miesiąca dodawane są następujące wartości:
dla lat 1800 - 1899 - 80
dla lat 1900 - 1999 - 0
...
Tak więc początek numeru PESEL osoby urodzonej 10 lutego 1899 roku będzie wyglądał tak: 998210... a osoby urodzonej 10 lutego 1999 roku tak: 990210..."

A czemu jak jestem urodzony 10.11.1988, to mój PESEL zaczyna się od: 881110...?
Więc jakie "0" na trzeciej pozycji?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # Tomasz Lubiński 2017-04-13 14:58
Nie zero na trzeciej pozycji, tylko dodaje się 0 do numeru miesiąca. Urodziłeś się w listopadzie dlatego po 88 oznaczającym rok, jest 11. Gdybyś urodził się w roku 1888 to Twój PESEL zaczynałby się 8891... bo do 11 miesiąca dodalibyśmy 80.
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz