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


F char2value(c)
   assert(c !C ‘AEIOU’, ‘No vowels’)
   R Int(c, radix' 36)
 
V sedolweight = [1, 3, 1, 7, 3, 9]
 
F checksum(sedol)
   V tmp = sum(zip(sedol, :sedolweight).map((ch, weight) -> char2value(ch) * weight))
   R String((10 - (tmp % 10)) % 10)
 
V sedols =
|‘710889
  B0YBKJ
  406566
  B0YBLH
  228276
  B0YBKL
  557910
  B0YBKR
  585284
  B0YBKT’
 
L(sedol) sedols.split("\n")
   print(sedol‘’checksum(sedol))