38 lines
767 B
Plaintext
38 lines
767 B
Plaintext
val isCusip = fn(s) {
|
|
if s is not string or len(s) != 9 {
|
|
return false
|
|
}
|
|
|
|
val basechars = '0'..'9' ~ 'A'..'Z' ~ "*@#"
|
|
|
|
val sum = for[=0] i of 8 {
|
|
val c = s[i]
|
|
var v = 0
|
|
|
|
switch[and] c {
|
|
case >= '0', <= '9':
|
|
v = c-'0'
|
|
|
|
case >= 'A', <= 'Z':
|
|
v = c-55 # c-'A'+10
|
|
|
|
case '*': v = 36
|
|
case '@': v = 37
|
|
case '#': v = 38
|
|
|
|
default: return false
|
|
}
|
|
|
|
if i div 2: v *= 2
|
|
_for += v \ 10 + v rem 10
|
|
}
|
|
|
|
s[9]-'0' == (10-(sum rem 10)) rem 10
|
|
}
|
|
|
|
val candidates = fw/037833100 17275R102 38259P508 594918104 68389X106 68389X105/
|
|
|
|
for c in candidates {
|
|
writeln c, ": ", if(isCusip(c): "good" ; "bad")
|
|
}
|