43 lines
914 B
Python
43 lines
914 B
Python
#!/usr/bin/env python3
|
|
|
|
import math
|
|
|
|
def cusip_check(cusip):
|
|
if len(cusip) != 9:
|
|
raise ValueError('CUSIP must be 9 characters')
|
|
|
|
cusip = cusip.upper()
|
|
total = 0
|
|
for i in range(8):
|
|
c = cusip[i]
|
|
if c.isdigit():
|
|
v = int(c)
|
|
elif c.isalpha():
|
|
p = ord(c) - ord('A') + 1
|
|
v = p + 9
|
|
elif c == '*':
|
|
v = 36
|
|
elif c == '@':
|
|
v = 37
|
|
elif c == '#':
|
|
v = 38
|
|
|
|
if i % 2 != 0:
|
|
v *= 2
|
|
|
|
total += int(v / 10) + v % 10
|
|
check = (10 - (total % 10)) % 10
|
|
return str(check) == cusip[-1]
|
|
|
|
if __name__ == '__main__':
|
|
codes = [
|
|
'037833100',
|
|
'17275R102',
|
|
'38259P508',
|
|
'594918104',
|
|
'68389X106',
|
|
'68389X105'
|
|
]
|
|
for code in codes:
|
|
print(f'{code} -> {cusip_check(code)}')
|