Skip to content

Instantly share code, notes, and snippets.

@ashumkin
Created June 27, 2019 13:55
Show Gist options
  • Save ashumkin/ffe2b06e11eed04cc0e16ace1e36baab to your computer and use it in GitHub Desktop.
Save ashumkin/ffe2b06e11eed04cc0e16ace1e36baab to your computer and use it in GitHub Desktop.

Revisions

  1. ashumkin created this gist Jun 27, 2019.
    41 changes: 41 additions & 0 deletions inn-calc.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,41 @@
    import sys

    if len(sys.argv) > 1:
    supposed_inn = sys.argv[1]
    else:
    supposed_inn = "123456789"

    def calc_checksum_digit(weights, inn):
    inn_splitted = list(map(int, inn))
    res = 0
    for i in range(len(inn_splitted)):
    res += inn_splitted[i] * weights[i]
    res %= 11
    if res > 9:
    res %= 10
    return str(res)

    def calc_checksum_digit_individuals(inn):
    inn = inn[:10]
    c1 = calc_checksum_digit((7,2,4,10,3,5,9,4,6,8,0), inn)
    c2 = calc_checksum_digit((3,7,2,4,10,3,5,9,4,6,8,0), inn + c1)
    return inn + c1 + c2

    def calc_checksum_digit_jl(inn):
    inn = inn[:9]
    c = calc_checksum_digit((2,4,10,3,5,9,4,6,8,0), inn)
    return inn + c

    def calc_checksum_digit_for_inn(inn):
    if len(inn) >= 10:
    return calc_checksum_digit_individuals(inn)
    elif len(inn) >= 9:
    return calc_checksum_digit_jl(inn)
    else:
    return None

    inn = calc_checksum_digit_for_inn(supposed_inn)
    if inn is None:
    print("Invalid INN", supposed_inn)
    else:
    print(inn)