View Single Post
Old 03-19-2009, 06:25 AM   #66
heinzd01

 
heinzd01's Avatar
 
Drives: 2010 SS RS, 1976 Type LT
Join Date: Sep 2008
Location: Jamestown, OH (East of Dayton)
Posts: 1,275
Quote:
Originally Posted by crazz28 View Post
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
heinzd01 is offline   Reply With Quote