35 lines
787 B
Plaintext
35 lines
787 B
Plaintext
isCusip = function(s)
|
|
if s.len != 9 then return false
|
|
sum = 0
|
|
for i in range(0, 7)
|
|
c = s[i]
|
|
v = 0
|
|
if c >= "0" and c <= "9" then
|
|
v = code(c) - 48
|
|
else if c >= "A" and c <= "Z" then
|
|
v = code(c) - 55
|
|
else if c == "*" then
|
|
v = 36
|
|
else if c == "@" then
|
|
v = 37
|
|
else if c == "#" then
|
|
v = 38
|
|
else
|
|
return false
|
|
end if
|
|
if i%2 == 1 then v *= 2 // check if odd as using 0-based indexing
|
|
sum += floor(v/10) + v%10
|
|
end for
|
|
return code(s[8]) - 48 == (10 - (sum%10)) % 10
|
|
end function
|
|
|
|
candidates = [
|
|
"037833100", "17275R102", "38259P508",
|
|
"594918104", "68389X106", "68389X105",
|
|
]
|
|
for candidate in candidates
|
|
s = "valid"
|
|
if not isCusip(candidate) then s = "invalid"
|
|
print candidate + " -> " + s
|
|
end for
|