Quote:
Originally Posted by crazz28
Sweet thread...although it sucks you can't get Canada's vin's, our own country releases information to everybody else but not their own people.
Although I have figured that my VIN will be at least 2G1FT1EW?A91????? don't quite know how that 9th check digit works.
|
The 9th digit is calculated from the other digits. Below is the VBA function I created if you can understand the code. It may not be the most efficient way to get the check sum digit but it seems to be working for me.
Function VIN_Checksum(sVIN As String) As String
Dim i As Integer
Dim arrCheckSum(1 To 17, 1 To 3) As Integer
Dim lngCheckSum As Long
Dim intCheckSum As Integer
' 1 - Translate each VIN character to a number
For i = LBound(arrCheckSum) To UBound(arrCheckSum)
Select Case Mid(sVIN, i, 1)
Case "0"
arrCheckSum(i, 1) = 0
Case "1"
arrCheckSum(i, 1) = 1
Case "2"
arrCheckSum(i, 1) = 2
Case "3"
arrCheckSum(i, 1) = 3
Case "4"
arrCheckSum(i, 1) = 4
Case "5"
arrCheckSum(i, 1) = 5
Case "6"
arrCheckSum(i, 1) = 6
Case "7"
arrCheckSum(i, 1) = 7
Case "8"
arrCheckSum(i, 1) = 8
Case "9"
arrCheckSum(i, 1) = 9
Case "A"
arrCheckSum(i, 1) = 1
Case "B"
arrCheckSum(i, 1) = 2
Case "C"
arrCheckSum(i, 1) = 3
Case "D"
arrCheckSum(i, 1) = 4
Case "E"
arrCheckSum(i, 1) = 5
Case "F"
arrCheckSum(i, 1) = 6
Case "G"
arrCheckSum(i, 1) = 7
Case "H"
arrCheckSum(i, 1) = 8
Case "J"
arrCheckSum(i, 1) = 1
Case "K"
arrCheckSum(i, 1) = 2
Case "L"
arrCheckSum(i, 1) = 3
Case "M"
arrCheckSum(i, 1) = 4
Case "N"
arrCheckSum(i, 1) = 5
Case "P"
arrCheckSum(i, 1) = 7
Case "R"
arrCheckSum(i, 1) = 9
Case "S"
arrCheckSum(i, 1) = 2
Case "T"
arrCheckSum(i, 1) = 3
Case "U"
arrCheckSum(i, 1) = 4
Case "V"
arrCheckSum(i, 1) = 5
Case "W"
arrCheckSum(i, 1) = 6
Case "X"
arrCheckSum(i, 1) = 7
Case "Y"
arrCheckSum(i, 1) = 8
Case "Z"
arrCheckSum(i, 1) = 9
End Select
Next i
' 2 - Setup the weight factor for each VIN digit
arrCheckSum(1, 2) = 8
arrCheckSum(2, 2) = 7
arrCheckSum(3, 2) = 6
arrCheckSum(4, 2) = 5
arrCheckSum(5, 2) = 4
arrCheckSum(6, 2) = 3
arrCheckSum(7, 2) = 2
arrCheckSum(8, 2) = 10
arrCheckSum(9, 2) = 0
arrCheckSum(10, 2) = 9
arrCheckSum(11, 2) = 8
arrCheckSum(12, 2) = 7
arrCheckSum(13, 2) = 6
arrCheckSum(14, 2) = 5
arrCheckSum(15, 2) = 4
arrCheckSum(16, 2) = 3
arrCheckSum(17, 2) = 2
' 3 - Multiply the number from 1 by the factor from 2
For i = LBound(arrCheckSum) To UBound(arrCheckSum)
arrCheckSum(i, 3) = arrCheckSum(i, 1) * arrCheckSum(i, 2)
Next
' 4 - Sum all the multiplied values from 3
lngCheckSum = 0
For i = LBound(arrCheckSum) To UBound(arrCheckSum)
lngCheckSum = lngCheckSum + arrCheckSum(i, 3)
Next
' 5 - Divide the sum from 4 by 11 and get the remainder
intCheckSum = lngCheckSum Mod 11
' Convert the remainder to text and return a value to the calling function
If intCheckSum = 10 Then
VIN_Checksum = "X"
Else
VIN_Checksum = CStr(intCheckSum)
End If
End Function ' Function VIN_Checksum(sVIN As String) As String