Public Sub PharmacodeDigitVerifier(Value As String) As String
Dim Result As String
If Not (Regex.IsMatch("[0-9]+", Value)) Then Return Result 'Invalid
If Not (Value.Length < 9) Then Return Result 'too long
Dim Base32Value As StringBuilder
Base32Value.Initialize
For Each s As String In Regex.Split("", Value)
Base32Value.Append(s)
Next
'Fill with zeros
For i = 1 To 8 - Base32Value.Length
Base32Value.Insert(0,"0")
Next
' Calculate digit
Dim CheckValue() As String, CheckSum As Int, Checkpart As Int
CheckValue = Regex.Split("", Base32Value.ToString)
For i = 0 To 3
Checkpart = CheckValue(i * 2)
CheckSum = CheckSum + Checkpart
Checkpart = CheckValue((i * 2) + 1) * 2
If Checkpart >= 10 Then
CheckSum = CheckSum + (Checkpart - 10) + 1
Else
CheckSum = CheckSum + Checkpart
End If
Next
' Add digit
Dim Digit As Int = CheckSum Mod 10
Result = Base32Value.Append(Digit).ToString
Return Result
End Sub