Task

For each number list of 6-digit SEDOLs, calculate and append the checksum digit.



That is, given this input:

710889
B0YBKJ
406566
B0YBLH
228276
B0YBKL
557910
B0YBKR
585284
B0YBKT
B00030

Produce this output:

7108899
B0YBKJ7
4065663
B0YBLH2
2282765
B0YBKL9
5579107
B0YBKR5
5852842
B0YBKT7
B000300

Extra credit

Check each input is correctly formed, especially with respect to valid characters allowed in a SEDOL string.



Related tasks

   Luhn test
   ISIN


type string6(object s)
    return string(s) and length(s)=6
end type
 
type sedolch(integer ch)
    return ch>='0' and ch<='Z' and (ch<='9' or ch>='A') and not find(ch,"AEIOU")
end type
 
function sedol(string6 t)
sedolch c
integer s = 0
    for i=1 to 6 do
        c = t[i]
        s += iff(c>='A'?c-'A'+10:c-'0')*{1,3,1,7,3,9}[i]
    end for
    return t & mod(10-mod(s,10),10)+'0'
end function
 
constant tests = {"710889",
                  "B0YBKJ",
                  "406566",
                  "B0YBLH",
                  "228276",
                  "B0YBKL",
                  "557910",
                  "B0YBKR",
                  "585284",
                  "B0YBKT",
                  "B00030"}
for i=1 to length(tests) do
    ?sedol(tests[i])
end for
