Skip to content

Instantly share code, notes, and snippets.

@ahartikainen
Last active August 5, 2018 08:04
Show Gist options
  • Save ahartikainen/b783b044ba033e850ec98311eb76e3a1 to your computer and use it in GitHub Desktop.
Save ahartikainen/b783b044ba033e850ec98311eb76e3a1 to your computer and use it in GitHub Desktop.
from datetime import datetime
def hetu(date, gender):
"""
hetu(date, gender)
Parameters
----------
date : datetime.datetime object
gender : str {'male', 'female'}
Returns
-------
list
list of possible personal identity codes
"""
date_of_birth = f"{date.day:>02d}{date.month:>02d}{str(date.year)[-2:]}"
century_sign = "+" if date.year < 1900 else "-" if date.year < 2000 else "A"
individual_numbers = range(2,900)
if gender.lower() in ('male', 'mies'):
individual_numbers = (n for n in individual_numbers if n % 2)
elif gender.lower() in ('female', 'nainen'):
individual_numbers = (n for n in individual_numbers if not (n % 2))
else:
msg = "Use either male/female for the parameter 'gender'"
raise TypeError(msg)
control_chars = "0123456789ABCDEFHJKLMNPRSTUVWXY"
personal_identity_codes = []
for individual_number in individual_numbers:
pic_number = int("".join([
date_of_birth,
f"{individual_number:>03d}",
]))
control_char = control_chars[pic_number%31]
personal_identity_code = "".join([
date_of_birth,
century_sign,
f"{individual_number:>03d}",
control_char,
])
personal_identity_codes.append(personal_identity_code)
return personal_identity_codes
if __name__ == "__main__":
import sys
import os
argv = sys.argv[1:]
argc = len(argv)
if not argc:
print('call for example: python hetu_codes.py 1859-01-15 male codes/date_1859-01-01_males.txt')
else:
try:
date, gender, savepath = argv
date = datetime.strptime(date, "%Y-%m-%d")
except:
print('call for example: python hetu_codes.py 1859-01-15 male codes/date_1859-01-01_males.txt')
else:
hetu_list = hetu(date, gender)
base, _ = os.path.split(savepath)
os.makedirs(base, exist_ok=True)
with open(savepath, "w") as f:
msg = "\n".join(hetu_list)
print(msg, file=f)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment