23 lines
570 B
Text
23 lines
570 B
Text
val .isCusip = f(.s) {
|
|
if not isString(.s) or len(.s) != 9 {
|
|
return false
|
|
}
|
|
|
|
val .basechars = cp2s('0'..'9') ~ cp2s('A'..'Z') ~ "*@#"
|
|
|
|
val .sum = for[=0] .i of 8 {
|
|
var .v = index(s2s(.s, .i), .basechars)
|
|
if not .v: return false
|
|
.v = .v[1]-1
|
|
if .i div 2: .v x= 2
|
|
_for += .v \ 10 + .v rem 10
|
|
}
|
|
|
|
.s[9]-'0' == (10-(.sum rem 10)) rem 10
|
|
}
|
|
|
|
val .candidates = w/037833100 17275R102 38259P508 594918104 68389X106 68389X105/
|
|
|
|
for .c in .candidates {
|
|
writeln .c, ": ", if(.isCusip(.c): "good" ; "bad")
|
|
}
|