36 lines
864 B
Plaintext
36 lines
864 B
Plaintext
get "libhdr"
|
|
|
|
let validcusip(c) = valof
|
|
$( let sum = 0
|
|
unless c%0 = 9 resultis false
|
|
for i = 1 to 8 do
|
|
$( let v = ( 2 - (i & 1) ) * valof
|
|
$( test '0' <= c%i <= '9'
|
|
then resultis c%i - '0'
|
|
or test 'A' <= c%i <= 'Z'
|
|
then resultis 10 + c%i - 'A'
|
|
or test c%i = '**'
|
|
then resultis 36
|
|
or test c%i = '@'
|
|
then resultis 37
|
|
or test c%i = '#'
|
|
then resultis 38
|
|
else resultis -1
|
|
$)
|
|
sum := sum + v/10 + v rem 10
|
|
$)
|
|
resultis (10 - (sum rem 10)) rem 10 = c%9 - '0'
|
|
$)
|
|
|
|
let show(c) be
|
|
writef("%S: %Svalid*N", c, validcusip(c) -> "", "in")
|
|
|
|
let start() be
|
|
$( show("037833100")
|
|
show("17275R102")
|
|
show("38259P508")
|
|
show("594918104")
|
|
show("68389X106")
|
|
show("68389X105")
|
|
$)
|