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


Public Sub Main()
Dim byWeight As Byte[] = [1, 3, 1, 7, 3, 9, 1]
Dim byCount, byCompute As Byte
Dim siTotal As Short
Dim sWork As New String[]
Dim sToProcess As String[] = ["710889", "B0YBKJ", "406566", "B0YBLH", "228276", "B0YBKL",
                              "557910", "B0YBKR", "585284", "B0YBKT", "B00030"]
 
For byCompute = 0 To sToProcess.Max
  For byCount = 1 To 6 
    If IsLetter(Mid(sToProcess[byCompute], byCount, 1)) Then 
      sWork.Add(Str(Asc(Mid(sToProcess[byCompute], byCount, 1)) - 55) * byWeight[byCount - 1])
    Else
      sWork.Add(Val(Mid(sToProcess[byCompute], byCount, 1)) * byWeight[byCount - 1])
    End If
  Next
 
  For byCount = 0 To 5
    siTotal += Val(sWork[byCount])
  Next
 
  siTotal = (10 - (siTotal Mod 10)) Mod 10
 
  Print sToProcess[byCompute] & " = " & sToProcess[byCompute] & siTotal
  sWork.Clear()
  siTotal = 0
Next
 
End