2023-07-01 11:58:00 -04:00
|
|
|
|
F cusip_check(=cusip)
|
|
|
|
|
|
I cusip.len != 9
|
2024-04-19 16:56:29 -07:00
|
|
|
|
X.throw ValueError(‘CUSIP must be 9 characters’)
|
2023-07-01 11:58:00 -04:00
|
|
|
|
|
|
|
|
|
|
cusip = cusip.uppercase()
|
|
|
|
|
|
V total = 0
|
2026-02-01 16:33:20 -08:00
|
|
|
|
L(i) 0.<8
|
2023-07-01 11:58:00 -04:00
|
|
|
|
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’))
|