27 lines
654 B
Standard ML
27 lines
654 B
Standard ML
fun char2value c =
|
|
if List.exists (fn x => x = c) (explode "AEIOU") then raise Fail "no vowels"
|
|
else if Char.isDigit c then ord c - ord #"0"
|
|
else if Char.isUpper c then ord c - ord #"A" + 10
|
|
else raise Match
|
|
|
|
val sedolweight = [1,3,1,7,3,9]
|
|
|
|
fun checksum sedol = let
|
|
val tmp = ListPair.foldlEq (fn (ch, weight, sum) => sum + char2value ch * weight)
|
|
0 (explode sedol, sedolweight)
|
|
in
|
|
Int.toString ((10 - (tmp mod 10)) mod 10)
|
|
end
|
|
|
|
app (fn sedol => print (sedol ^ checksum sedol ^ "\n"))
|
|
[ "710889",
|
|
"B0YBKJ",
|
|
"406566",
|
|
"B0YBLH",
|
|
"228276",
|
|
"B0YBKL",
|
|
"557910",
|
|
"B0YBKR",
|
|
"585284",
|
|
"B0YBKT" ];
|