30 lines
687 B
Plaintext
30 lines
687 B
Plaintext
(de cusip (Str)
|
|
(let (Str (mapcar char (chop Str)) S 0)
|
|
(for (I . C) (head 8 Str)
|
|
(let V
|
|
(cond
|
|
((<= 48 C 57) (- C 48))
|
|
((<= 65 C 90) (+ 10 (- C 65)))
|
|
((= C 42) 36)
|
|
((= C 64) 37)
|
|
((= C 35) 38) )
|
|
(or
|
|
(bit? 1 I)
|
|
(setq V (>> -1 V)) )
|
|
(inc
|
|
'S
|
|
(+ (/ V 10) (% V 10)) ) ) )
|
|
(=
|
|
(- (last Str) 48)
|
|
(% (- 10 (% S 10)) 10) ) ) )
|
|
|
|
(println
|
|
(mapcar
|
|
cusip
|
|
(quote
|
|
"037833100"
|
|
"17275R102"
|
|
"38259P508"
|
|
"68389X106"
|
|
"68389X105" ) ) )
|