37 lines
823 B
Text
37 lines
823 B
Text
|
|
F cusip_check(=cusip)
|
|||
|
|
I cusip.len != 9
|
|||
|
|
X ValueError(‘CUSIP must be 9 characters’)
|
|||
|
|
|
|||
|
|
cusip = cusip.uppercase()
|
|||
|
|
V total = 0
|
|||
|
|
L(i) 8
|
|||
|
|
V v = 0
|
|||
|
|
V c = cusip[i]
|
|||
|
|
I c.is_digit()
|
|||
|
|
v = Int(c)
|
|||
|
|
E I c.is_alpha()
|
|||
|
|
V p = c.code - ‘A’.code + 1
|
|||
|
|
v = p + 9
|
|||
|
|
E I c == ‘*’
|
|||
|
|
v = 36
|
|||
|
|
E I c == ‘@’
|
|||
|
|
v = 37
|
|||
|
|
E I c == ‘#’
|
|||
|
|
v = 38
|
|||
|
|
|
|||
|
|
I i % 2 != 0
|
|||
|
|
v *= 2
|
|||
|
|
|
|||
|
|
total += v I/ 10 + v % 10
|
|||
|
|
V check = (10 - (total % 10)) % 10
|
|||
|
|
R String(check) == cusip.last
|
|||
|
|
|
|||
|
|
V codes = [‘037833100’,
|
|||
|
|
‘17275R102’,
|
|||
|
|
‘38259P508’,
|
|||
|
|
‘594918104’,
|
|||
|
|
‘68389X106’,
|
|||
|
|
‘68389X105’]
|
|||
|
|
L(code) codes
|
|||
|
|
print(code‘: ’(I cusip_check(code) {‘valid’} E ‘invalid’))
|