Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import requests
- from string import ascii_lowercase
- MALE = 0
- FEMALE = 1
- monthMap = {
- 1 : "A",
- 2 : "B",
- 3 : "C",
- 4 : "D",
- 5 : "E",
- 6 : "H",
- 7 : "L",
- 8 : "M",
- 9 : "P",
- 10 : "R",
- 11 : "S",
- 12 : "T"
- }
- def conditionInput(inputText, errorText, inputCondition) :
- while True :
- try :
- n = input(inputText)
- if not inputCondition(n) :
- raise Exception()
- break
- except :
- print(errorText)
- continue
- return n
- def letterizeMonth(month) :
- return monthMap[month]
- def numberInput(inputText, errorText, inputCondition) :
- return int(conditionInput(inputText, errorText, \
- lambda n: n.isdecimal() and inputCondition(int(n))))
- def reduceName(name) :
- consonants = [i for i in list(name) if i not in ('a', 'e', 'i', 'o', 'u')]
- vowels = [i for i in list(name) if i in ('a', 'e', 'i', 'o', 'u')]
- return ("".join(consonants[:3]) if len(consonants) >= 3 else \
- "".join(consonants) + "".join(vowels[:3 - len(consonants)]) \
- if len(vowels) >= 3 - len(consonants) else \
- "".join(consonants + vowels)).upper()
- class CodeCertifier() :
- DRAW_MAP = {
- "A":0, 0:0, "K":10, "T":19,
- "B":1, 1:1, "L":11, "U":20,
- "C":2, 2:2, "L":11, "V":21,
- "D":3, 3:3, "M":12, "W":22,
- "E":4, 4:4, "N":13, "X":23,
- "F":5, 5:5, "O":14, "Y":24,
- "G":6, 6:6, "P":15, "Z":25,
- "H":7, 7:7, "Q":16,
- "I":8, 8:8, "R":17,
- "J":9, 9:9, "S":18
- }
- ODD_MAP = {
- "A":1, 0:1, "K":2, "T":14,
- "B":0, 1:0, "S":12, "U":16,
- "C":5, 2:5, "L":4, "V":10,
- "D":7, 3:7, "M":18, "W":22,
- "E":9, 4:9, "N":20, "X":25,
- "F":13, 5:13, "O":11, "Y":24,
- "G":15, 6:15, "P":3,
- "H":17, 7:17, "Q":6,
- "I":19, 8:19, "R":8,
- "J":21, 9:21, "Z":25
- }
- CH_MAP = {index : letter.upper() \
- for index, letter in enumerate(ascii_lowercase)}
- def calculateCertifyCode(self, code) :
- total = 0
- for i in list(code) :
- if i.isdecimal() : i = int(i)
- if ((code.index(str(i)) + 1) % 2) == 0 :
- total += self.DRAW_MAP[i]
- else : total += self.ODD_MAP[i]
- chc = int(total / 26)
- return self.CH_MAP[chc]
- class CitiesScraper() :
- CITIES_URL = "https://raw.githubusercontent.com" + \
- "/matteocontrini/comuni-json/master/comuni.json"
- def __init__(self) :
- r = requests.get(self.CITIES_URL)
- r.raise_for_status()
- self.cities = r.json()
- def getRawData(self) :
- return self.cities
- def isCityExistent(self, name) :
- for city in self.cities :
- if name.strip().lower() == \
- city["nome"].strip().lower() :
- return True
- return False
- def getCityFromName(self, name) :
- for city in self.cities :
- if name.strip().lower() == \
- city["nome"].strip().lower() :
- return city
- return None
- print("Caricamento informazioni sui comuni...")
- cities = CitiesScraper()
- print("Comuni caricati\n")
- print("CALCOLATORE CODICE FISCALE")
- print("by MRtecno98\n")
- surname = input("Inserisci cognome: ")
- name = input("Inserisci nome: ")
- print()
- print("Inserisci data di nascita:")
- day = numberInput("Inserisci giorno: ", \
- "Inserisci un numero valido", \
- lambda n: n > 0 and n <= 31)
- month = numberInput("Inserisci mese: ", \
- "Inserisci un numero valido", \
- lambda n: n > 0 and n <= 12)
- year = numberInput("Inserisci anno: ", \
- "Inserisci un numero valido", \
- lambda n: True)
- print()
- sex = conditionInput("Inserisci sesso: ", \
- "Inserisci un sesso valido", \
- lambda n: n.lower() == "m" or n.lower() == "maschio" or \
- n.lower() == "f" or n.lower() == "femmina").lower()
- sex_ser = MALE if sex == "maschio" or sex == "m" else \
- FEMALE if sex == "femmina" or sex == "f" else None
- print()
- city = conditionInput("Inserisci comune: ", \
- "Inserisci un comune valido", \
- lambda n: cities.isCityExistent(n))
- city_code = cities.getCityFromName(city)["codiceCatastale"]
- print()
- print("Calcolo del codice fiscale...")
- code = (reduceName(surname) + reduceName(name) + \
- "".join(str(year)[2:]) + letterizeMonth(month) + \
- str(day if sex_ser == MALE else day + 40) + city_code).upper()
- print("Caricamento certificatore...")
- certifier = CodeCertifier()
- ccode = certifier.calculateCertifyCode(code)
- code += ccode
- print()
- print("Operazioni Terminate. Codice fiscale: " + code)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement