Option Explicit
Const MODULE_NAME As String = "modVIN"
Public Function CheckVIN(VIN As String) As Boolean
Dim i As Long
Dim lngSum As Long
Dim lngWeight As String
Dim lngMultiplier As String
Dim Temp As Long
lngWeight = "A1B2C3D4E5F6G7H8J1K2L3M4N5P7R9S2T3U4V5W6X7Y8Z9"
lngMultiplier = "87654321098765432"
If Len(VIN) <> 17 Then
Exit Function
End If
lngSum = 0
For i = 1 To Len(VIN)
If IsNumeric(Mid(VIN, i, 1)) Then
Temp = Mid(VIN, i, 1)
Else
Temp = CLng(Mid(lngWeight, InStr(1, lngWeight, Mid(VIN, i, 1)) + 1, 1))
End If
If i <> 8 Then
lngSum = lngSum + Temp * CStr(Mid(lngMultiplier, i, 1))
Else
lngSum = lngSum + Temp * 10
End If
Next i
Temp = lngSum Mod 11
If Temp = 10 And Mid(VIN, 9, 1) = "X" Or Mid(VIN, 9, 1) = CStr(Temp) Then
CheckVIN = True
Else
CheckVIN = False
End If
End Function