Function decodevin(pnum)
If IsNumeric(pnum) Then
decodevin = pnum
Exit Function
End If
Select Case pnum
Case "A"
decodevin = 1
Case "B"
decodevin = 2
Case "C"
decodevin = 3
Case "D"
decodevin = 4
Case "E"
decodevin = 5
Case "F"
decodevin = 6
Case "G"
decodevin = 7
Case "H"
decodevin = 8
Case "J"
decodevin = 1
Case "K"
decodevin = 2
Case "L"
decodevin = 3
Case "M"
decodevin = 4
Case "N"
decodevin = 5
Case "P"
decodevin = 7
Case "R"
decodevin = 9
Case "S"
decodevin = 2
Case "T"
decodevin = 3
Case "U"
decodevin = 4
Case "V"
decodevin = 5
Case "W"
decodevin = 6
Case "X"
decodevin = 7
Case "Y"
decodevin = 8
Case "Z"
decodevin = 9
End Select
End Function
Function testvin(vin) As String
Dim p1 As Long
Dim p2 As Long
Dim p3 As Long
Dim p4 As Long
Dim p5 As Long
Dim p6 As Long
Dim p7 As Long
Dim p8 As Long
Dim p9 As Long
Dim p10 As Long
Dim p11 As Long
Dim p12 As Long
Dim p13 As Long
Dim p14 As Long
Dim p15 As Long
Dim p16 As Long
Dim p17 As Long
Dim r1 As Long
'calculate check digit
If IsNumeric(Mid(vin, 9, 1)) Then
p9 = (Mid(vin, 9, 1))
ElseIf Mid(vin, 9, 1) = "X" Then
p9 = 10
Else
testvin = "invalid"
Exit Function
End If
p1 = decodevin(Mid(vin, 1, 1))
p2 = decodevin(Mid(vin, 2, 1))
p3 = decodevin(Mid(vin, 3, 1))
p4 = decodevin(Mid(vin, 4, 1))
p5 = decodevin(Mid(vin, 5, 1))
p6 = decodevin(Mid(vin, 6, 1))
p7 = decodevin(Mid(vin, 7, 1))
p8 = decodevin(Mid(vin, 8, 1))
p10 = decodevin(Mid(vin, 10, 1))
p11 = decodevin(Mid(vin, 11, 1))
p12 = decodevin(Mid(vin, 12, 1))
p13 = decodevin(Mid(vin, 13, 1))
p14 = decodevin(Mid(vin, 14, 1))
p15 = decodevin(Mid(vin, 15, 1))
p16 = decodevin(Mid(vin, 16, 1))
p17 = decodevin(Mid(vin, 17, 1))
r1 = ((p1 * 8) + (p2 * 7) + (p3 * 6) + (p4 * 5) + (p5 * 4) + (p6 * 3) + (p7 * 2) + (p8 * 10) + (p10 * 9) + (p11 * 8) + (p12 * 7) + (p13 * 6) + (p14 * 5) + (p15 * 4) + (p16 * 3) + (p17 * 2)) Mod 11
If (r1 = p9) Then
testvin = "Valid"
Else
testvin = vin
End If
End Function