28 lines
826 B
Plaintext
28 lines
826 B
Plaintext
Private Function Cusip_Check_Digit(s As Variant) As Integer
|
|
Dim Sum As Integer, c As String, v As Integer
|
|
For i = 1 To 8
|
|
c = Mid(s, i, 1)
|
|
If IsNumeric(c) Then
|
|
v = Val(c)
|
|
Else
|
|
Select Case c
|
|
Case "a" To "z"
|
|
v = Asc(c) - Asc("a") + 10
|
|
Case "A" To "Z"
|
|
v = Asc(c) - Asc("A") + 10
|
|
Case "*"
|
|
v = 36
|
|
Case "@"
|
|
v = 37
|
|
Case "#"
|
|
v = 38
|
|
Case Else
|
|
Debug.Print "not expected"
|
|
End Select
|
|
End If
|
|
If i Mod 2 = 0 Then v = v * 2
|
|
Sum = Sum + Int(v \ 10) + v Mod 10
|
|
Next i
|
|
Cusip_Check_Digit = (10 - (Sum Mod 10)) Mod 10
|
|
End Function
|