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


      PRINT FNsedol("710889")
      PRINT FNsedol("B0YBKJ")
      PRINT FNsedol("406566")
      PRINT FNsedol("B0YBLH")
      PRINT FNsedol("228276")
      PRINT FNsedol("B0YBKL")
      PRINT FNsedol("557910")
      PRINT FNsedol("B0YBKR")
      PRINT FNsedol("585284")
      PRINT FNsedol("B0YBKT")
      PRINT FNsedol("B00030")
      END
 
      DEF FNsedol(d$)
      LOCAL a%, i%, s%, weights%()
      DIM weights%(6) : weights%() = 0, 1, 3, 1, 7, 3, 9
      FOR i% = 1 TO 6
        a% = ASCMID$(d$,i%) - &30
        s% += (a% + 7 * (a% > 9)) * weights%(i%)
      NEXT
      = d$ + CHR$(&30 + (10 - s% MOD 10) MOD 10)