PESEL

PESEL to skrót od wyrażenia "Powszechny Elektroniczny System Ewidencji Ludności". Jest on prowadzony od 1979 roku. Numer PESEL to 11-cyfrowy zapis, w którym zakodowane są różne informacje (zobacz poniżej) i który jest unikalnym numerem przypisanym Polakowi po urodzeniu lub niektórym cudzoziemcom.

PESEL zbudowany jest z następujących elementów:


Szybki test

(gotowe odpowiedzi)

Oceń zdanie: Nie ma dwóch osób o takim samym numerze PESEL
To nieprawda
prawda

W którym roku urodziła się osoba z takim PESEL-em?
1910
1980
1981
2001
2008

W jakim miesiącu urodziła się osoba z takim PESEL-em?
maj
czerwiec
lipiec
sierpień
wrzesień

W jakim miesiącu urodziła się osoba z takim PESEL-em?
styczeń
luty
kwiecień
listopad
grudzień

Jaka jest pełna data urodzenia osoby z tym PESEL-em?
11 listopada 2012 r.
11 grudnia 1912 r.
11 grudnia 2012 r.
12 listopada 1912 r.
12 listopada 2012 r.

To jest PESEL kobiety czy mężczyzny?
kobiety
mężczyzny

Ile wynosi cyfra kontrolna w tym PESEL-u?
1
3
4
5
7

Czy może istnieć PESEL, który ma 0 tak na początku, jak i końcu?
nie
tak

Zadania

Zad. 1 Podaj pełną datę urodzenia człowieka o numerze PESEL 78120925732

Zad. 2 Podaj pełną datę urodzenia człowieka o numerze PESEL 10292902083

Zad. 3 Podaj płeć osoby o takim PESEL-u: 77041903179

Zad. 4 Podaj przykład, jak mógłby wyglądać PESEL chłopczyka, który urodził się dzisiaj.

Zad. 5 Ktoś podał taki PESEL: 05010100102. Program napisał komunikat Niepoprawny PESEL. Dlaczego?

Zad. 6 Gdyby nie zabraniała tego ustawa o danych osobowych, to jakie informacje mogłyby być zakodowane w numerze PESEL w cyfrach siódmej, ósmej i dziewiątej?

Pamiętaj, że PESEL dostajemy "na całe życie", tak więc Twoja odpowiedź nie może dotyczyć informacji, które mogą ulegać zmianie (np. kolor oczu czy włosów), jak też nie dać się zapisać trzema cyframi (np. kod DNA).

Zadania - cz. II (programowanie)

Napisz program, który po wprowadzeniu pierwszych 10 cyfr PESEL obliczy ostatnią cyfrę kontrolną.
Do rozwiązania tego zadania może posłużyć arkusz kalkulacyjny lub jakiś język programowania.


Poniżej "kluczowe" wskazówki dotyczące takiego programu w arkuszu kalkulacyjnym i w języku Python.


Dowolny arkusz kalkulacyjny

Zdecydowanie najławiej jest stworzyć taki program w arkuszu kalkulacyjnym, gdzie każdą cyfrę PESEL-u możemy wpisywać w osobną komórkę, pod nimi wagi, a np. jeszcze niżej wyniki mnożenia cyfr przez wagi i gdzieś w osobnej komórce sumę tych iloczynów. Komórki z obliczeniami można ukryć (dla estetyki).



Jest to klasyczna tematyka w nauce o arkuszu kalkulacyjnym i jedyna trudność pojawia się przy "wyciągnięciu" ostatniej cyfry z sumy (aby odjąć ją od 10 i otrzymać szukaną cyfrę kontrolną).
Rozwiązaniem jest wykorzystanie dzielenia modulo, czyli dzielenia, w którym nie interesuje nas wynik, a reszta. Jeśli więc otrzymamy sumę np. 67, to aby "wyciągnąć" ostatnią cyfrę (7) musimy podzielić 67 przez 10 (wynik 6 reszta 7) i zabrać właśnie resztę - tak działa dzielenie modulo, a jego formuła to: = MOD(67;10)



Program w języku Python

W prostszej wersji takiego programu można wprowadzać każdą cyfrę PESEL osobno i od razu mnożyć ją przez wagi, iloczyny dodać i ... dojść do tego samego problemu jak w arkuszu - jak "wyciągnąć" ostatnią cyfrę sumy?
Tutaj również przyda się dzielenie modulo, które w Pythonie ma znak % (procentu): ostatniacyfra=suma%10



Co jeśli chcielibyśmy wprowadzić w programie możliwość podania PESEL-u w jednym ciągu cyfr?

Możliwości rozwiązań jest kilka, ale pamiętajmy, że szukamy rozwiązania zrozumiałego dla osoby początkującej w programowaniu, dlatego też można ponownie wykorzystać "cichego bohatera" tego problemu, czyli dzielenie modulo.
10 początkowych cyfr PESEL-u traktujemy jak "pełną" liczbę, czyli np. 8002050123 to 8 mld 2 mln 50 tys. 123.
Jak "wyciągnąć" pierwszą cyfrę? Trzeba podzielić całą liczbę przez 1 miliard i zabrać tylko część całkowitą (w Pythonie to int


cyfra_1 = int(liczba/1000000000)


Teraz druga cyfra - trzeba podzielić liczbę przez 100 milionów (o jedno zero mniej niż wcześniej), zabrać tylko część całkowitą (otrzymamy liczbę dwucyfrową), a następnie podzielić modulo 10.


cyfra_2 = int(liczba/100000000)


Cyfra trzecia - trzeba podzielić liczbę przez 10 milionów (o jedno zero mniej niż wcześniej), zabrać tylko część całkowitą (otrzymamy liczbę trzycyfrową), a następnie podzielić modulo 10.


cyfra_3 = int(liczba/10000000)


itd.


Cyfrę dziesiątą otrzymujemy prościej:


cyfra_10 = liczba%10


Później już "normalnie" - cyfry pomnożyć przez wagi, dodać wyniki, itd.