In [61]:
def create_hetus(ddmmyyyy, gender):
    # generator function to yield valid HETU numbers
    # ppkkvvyzzzq
    # pp  - day
    # kk  - month
    # vv  - year
    # y   - century (+ for 1800, - for 1900, A for 2000)
    # zzz - individual number (even for females, odd for males, values of 002-899)
    # q   - checkdigit, calculated as t = (ppkkvvzzz mod 31) as q = t~[0-9, A-Y]
    
    checksum = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", \
                "A", "B", "C", "D", "E", "F", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y"]
    hetus = []
    index = 0
    if gender == "m":
        index += 1   
    y = 0
    ddmmyy = str(ddmmyyyy)[0:4] + str(ddmmyyyy)[6:]
    
    if int(ddmmyyyy[4:6]) == 18:
        y = "+"
    elif int(ddmmyyyy[4:6]) == 19:
        y = "-"
    elif int(ddmmyyyy[4:6]) >= 20:
        y = "A"

    while index < 900:
        index += 2
        zzz = str("%03d" % index)
        tmp = int(str(ddmmyy) + str(zzz))
        q = checksum[tmp % 31]
        het = str(ddmmyy) + str(y) + str(zzz) + str(q)
        hetus.append(het)
        
    return hetus

In [62]:
create_hetus("30061988", "male")


Out[62]:
['300688-002Y',
 '300688-0041',
 '300688-0063',
 '300688-0085',
 '300688-0107',
 '300688-0129',
 '300688-014B',
 '300688-016D',
 '300688-018F',
 '300688-020J',
 '300688-022L',
 '300688-024N',
 '300688-026R',
 '300688-028T',
 '300688-030V']

In [41]:
def zzz_estimator():
    # bY = total births for that year
    # bD = bY / 365

In [ ]: