#!/usr/bin/env python3.6 # coding=utf-8 import datetime __author__ = "Dariusz Dębicki" __copyright__ = "Copyright 2018, Dariusz Dębicki" __license__ = "GPL" __version__ = "1.0" __email__ = "dariusz.debicki@protonmail.com" # Project PESEL, Python 3.6 # Na podstawie numeru pesel określa płeć, wiek oraz podaje ilość przeżytych dni. imie = str(input("Podaj swoje imię: ")) pesel = str(input("Podaj swój PESEL: ")) # Sprawdzanie poprawności numeru PESEL # ======================================================================== # Poniższa metoda sprowadza się do obliczenia sumy: # 1×a + 3×b + 7×c + 9×d + 1×e + 3×f + 7×g + 9×h + 1×i + 3×j + 1×k # (gdzie litery oznaczają kolejne cyfry numeru), a następnie sprawdzenia # czy reszta z dzielenia przez 10 jest zerem. Innymi słowy, jeśli ostatnia # cyfra otrzymanej sumy jest zerem, to numer PESEL jest poprawny, # w przeciwnym razie numer jest błędny. # Convert string pesel to table integer: p1 = int(pesel[0]) p2 = int(pesel[1]) p3 = int(pesel[2]) p4 = int(pesel[3]) p5 = int(pesel[4]) p6 = int(pesel[5]) p7 = int(pesel[6]) p8 = int(pesel[7]) p9 = int(pesel[8]) p10 = int(pesel[9]) p11 = int(pesel[10]) # Calculate checksum checksum = 1 * p1 + 3 * p2 + 7 * p3 + 9 * p4 + 1 * p5 + 3 * p6 + 7 * p7 + 9 * p8 +1 * p9 + 3 * p10 + 1 * p11 # Data urodzenia # ======================================================================== # Dla osób urodzonych w latach 1900 do 1999 – miesiąc zapisywany jest # w sposób naturalny, tzn. dwucyfrowo od 01 do 12 # dla osób urodzonych w innych latach niż 1900–1999 dodawane są do numeru # miesiąca następujące wielkości: # dla lat 1800–1899 – 80 # dla lat 2000–2099 – 20 # dla lat 2100–2199 – 40 # dla lat 2200–2299 – 60 # # Przykładowo osoba urodzona 14 lipca 2002 roku ma następujący zapis # w numerze ewidencyjnym: 022714 pesel_month_check = p3 * 10 + p4 if 81 <= pesel_month_check <= 92: pesel_year = 1800 + p1 * 10 + p2 pesel_month = 80 - p3 * 10 + p4 elif 21 <= pesel_month_check <= 32: pesel_year = 2000 + p1 * 10 + p2 pesel_month = 20 - p3 * 10 + p4 elif 41 <= pesel_month_check <= 52: pesel_year = 2100 + p1 * 10 + p2 pesel_month = 40 - p3 * 10 + p4 elif 61 <= pesel_month_check <= 82: pesel_year = 2200 + p1 * 10 + p2 pesel_month = 60 - p3 * 10 + p4 else: pesel_year = 1900 + p1 * 10 + p2 pesel_month = p3 * 10 + p4 pesel_day = p5 * 10 + p6 pesel_birth = datetime.date(pesel_year, pesel_month, pesel_day) now = datetime.date.today() delta = now - pesel_birth text = "Witaj " + imie + ", Twój PESEL to " + pesel if checksum %10 == 0: print("PESEL prawidłowy\n") if p10 %2 == 0: print(text) print() print("Jesteś kobietą") print("Urodziłaś się", pesel_birth, "\n") print("Gratulacje, przeżyłaś", delta.days, "dni :)") else: print(text) print() print("Jesteś mężczyzną") print("Urodziłeś się", pesel_birth, "\n") print("Gratulacje, przeżyłeś", delta.days, "dni :)") else: print("PESEL błędny")