Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności:
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: generowanie numeru PESEL  (Przeczytany 449 razy)
« : 19:41 23/02/19 »
orlos00 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 8


Siemanko, tak jak w temacie, usiłuję stworzyć program do GENEROWANIA numeru PESEL po podaniu daty urodzenia,
wpadłem w internecie na coś takiego:
Cytuj
# polish national identification number (PESEL) generator
# ________________________________________________________


# requirements for validity:

# 873208|7901|5

# the first 6 digits are for d.o.b.: respectively: year, month, day

# for distinguishing 20th century years from the 21st ones:
# years 1900 - 1999 have normal months numbers (1 - 12)
# years 2000 - 2099 have normal months numbers + 20 (21 - 32)

# the following four digits are random (well, excluding last one coz it stands for sex)

# the last digit comes out of a equation, and it is for checking the validity

# equation: 1*a + 3*b + 7*c + 9*d + 1*e + 3*f + 7*g + 9*h + 1*i + 3*j
# (where the a-j letters are standing for the digits of first ten digits of PESEL number respectively)
# then: 10 - (the last digit of the equation result) gives you the last digit of PESEL number
# (if the last digit of the equation was 0, then it is the last digit of PESEL as well)


# examples:
# 02103032074
# 55092784844
# 28301156598

# ________________________________________________________


import random

def pesel():

   year = random.randint(1900,2099)


   if year <= 1999:
      month = random.randint(1,12)

   elif year >= 2000:
      month = random.randint(1,12) + 20 # to distinguish between centuries


   # I need to put months in a category to choose correct range of possible days for each one
   odd_months = (1, 3, 5, 7, 8, 10, 12, 21, 23, 25, 27, 28, 30, 32)
   even_months = (4, 6, 9, 11, 24, 26, 29, 31)

   if month in odd_months:
      day = random.randint(1,31)

   elif month in even_months:
      day = random.randint(1,30)      
   # this is for february
   else:
      if year % 4 == 0 and year != 1900:
         day = random.randint(1,29) # leap year

      else:
         day = random.randint(1,28) # usual year





   four_random = random.randint(1000,9999)
   four_random = str(four_random)




   # here comes the equation part, it calculates the last digit

   y = '%02d' % (year % 100)
   m = '%02d' % month
   dd = '%02d' % day

   a = y[0]
   a = int(a)

   b = y[1]
   b = int(b)

   c = m[0]
   c = int(c)

   d = m[1]
   d = int(d)

   e = dd[0]
   e = int(e)

   f = dd[1]
   f = int(f)

   g = four_random[0]
   g = int(g)

   h = four_random[1]
   h = int(h)

   i = four_random[2]
   i = int(i)

   j = four_random[3]
   j = int(j)

   check = a + 3 * b + 7 * c + 9 * d + e + 3 * f + 7 * g + 9 * h + i + 3 * j

   if check % 10 == 0:
      last_digit = 0
   else:
      last_digit = 10 - (check % 10)



   # printing the final number out

   print('%02d' % (year % 100), end='')
   print('%02d' % month, end='')
   print('%02d' % day, end='')
   print(four_random, end='')
   print(last_digit)


pesel()
Zapisane
« Odpowiedz #1 : 02:20 24/02/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 481


I w czym problem Uśmiech?
Kod nie działa, nie wiesz czy generowanie jest prawidłowe, czy chodzi o coś jeszcze innego Chichot ?
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #2 : 10:11 24/02/19 »
orlos00 Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 8


Chodzi mi o generowanie po podaniu daty urodzenia.. Mrugnięcie
Zapisane
« Odpowiedz #3 : 11:40 25/02/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 481


Ten fragment:
Kod
def pesel():
 
  year = random.randint(1900,2099)
 
 
  if year <= 1999:
     month = random.randint(1,12)
 
  elif year >= 2000:
     month = random.randint(1,12) + 20 # to distinguish between centuries
 
 
  # I need to put months in a category to choose correct range of possible days for each one
  odd_months = (1, 3, 5, 7, 8, 10, 12, 21, 23, 25, 27, 28, 30, 32)
  even_months = (4, 6, 9, 11, 24, 26, 29, 31)
 
  if month in odd_months:
     day = random.randint(1,31)
 
  elif month in even_months:
     day = random.randint(1,30)      
  # this is for february
  else:
     if year % 4 == 0 and year != 1900:
        day = random.randint(1,29) # leap year
 
     else:
        day = random.randint(1,28) # usual year
 
Zastąp tak:
Kod
 def pesel(day, month, year):
   if year > 2000:
       month += 20

Reszta wewnątrz funkcji pesel, bez zmian.

Odwołując się do pesel, musisz podać mu datę w argumentach do funkcji.
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot