Vehicle identification number
From Free net encyclopedia
- For other uses of Vin, see Vin (disambiguation).
Vehicle identification numbers (VINs) are used to uniquely identify motor vehicles. Prior to 1981 there was not an accepted standard for these numbers, so different manufacturers used different formats. Modern day VINs consist of 17 characters that do not include the letters I, O or Q.
Contents |
Parts of the VIN
There are two different standards for the Vehicle Identification Number. The ISO standard, 3779, is copied by the European Union. In North America, a more stringent (but compatible) system is used.
The VIN is composed of the following sections:
Standard | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ||
ISO 3779 | WMI | VDS | VIS | ||||||||||||||||
North American | Manufacturer Identifier | Vehicle Attributes | Check Digit | Model Year | Plant Code | Sequential Number |
World Manufacturer Identifier
The first three characters uniquely identify the manufacturer of the vehicle using the World Manufacturer Identifier or WMI code. A manufacturer that builds fewer than 500 vehicles per year uses a 9 as the third digit and the 12th, 13th and 14th position of the VIN for a second part of the identification. Some manufacturers use the third character as a code for a vehicle category (e.g., bus or truck), a division within a manufacturer, or both. For example, within 1G (assigned to General Motors in the United States), 1G1 represents Chevrolet passenger cars; 1G2, Pontiac passenger cars; and 1GC, Chevrolet trucks.
WMI Regions
The first character of the WMI is the region in which the manufacturer is located. In practice, each is assigned to a country of manufacture. Common auto-manufacturing countries are noted.
WMI | Region | Notes |
A-H | Africa | AA-AH = South Africa |
J-R | Asia | J = Japan KL-KR = South Korea L = China MA-ME = India MF-MK = Indonesia ML-MR = Thailand PA-PE = Philippines PL-PR = Malaysia |
S-Z | Europe | SA-SM = United Kingdom SN-ST, W = Germany SU-SZ = Poland TA-TH = Switzerland TJ-TP = Czech Republic TR-TV = Hungary VA-VE = Austria VF-VR = France VS-VW = Spain VX-V2 = Yugoslavia XS-XW = USSR X3-X0 = Russia YA-YE = Belgium YF-YK = Finland YS-YW = Sweden ZA-ZR = Italy |
1-5 | North America | 1, 4, 5 = United States 2 = Canada 3 = Mexico |
6-7 | Oceania | 6A-6W = Australia 7A-7E = New Zealand |
8-0 | South America | 8A-8E = Argentina 8X-82 = Venezuela 9A-9E, 93-99 = Brazil 9F-9J = Colombia |
List of common WMIs
The Society of Automotive Engineers (SAE) in the US assigns WMIs to countries and manufacturers. The following table contains a list of commonly used WMIs, although there are many others assigned.
Vehicle Descriptor Section
The 4th through 9th positions in the VIN are the Vehicle Descriptor Section or VDS. This is used, according to local regulations, to identify the vehicle type and may include information on the platform used, the model, and the body style. Each manufacturer has a unique system for using this field.
North American Check Digits
One element that is fairly consistent is the use of position 9 as a check digit, compulsory for vehicles in North America and used fairly consistently even outside this rule.
Vehicle Identifier Section
The 10th through 17th positions are used as the Vehicle Identifier Section or VIS. This is used by the manufacturer to identify the individual vehicle in question. This may include information on options installed or engine and transmission choices, but often is a simple sequential number. In fact, in North America, the last five digits must be numeric.
North American Model Year
One consistent element of the VIS is character number 10, which is required (in North America) to encode the model year of the vehicle.
North American Plant Code
Another consistently-used element (which is compulsory in North America) is the use of the 11th character to encode the factory of manufacture of the vehicle. Although each manufacturer has their own set of plant codes, their location in the VIN is standardized.
Model year encoding
Besides the three letters that are not allowed in the VIN itself (I, O and Q), the letters U and Z and the digit 0 are not used for the year code. Note that the year code can be the calendar year in which a vehicle is built, or a model or type year allocated by the manufacturer. The year 1980 is encoded as "A", and subsequent years increment through the allowed letters, so that "Y" represents the year 2000. 2001 through 2009 are encoded as the digits 1 through 9.
Memorizing the year codes
For some occupations, it can be beneficial to memorize the year VIN code. One easy way to more easily recall each year code is to relate a rhyme or similarity between the actual year and the VIN code. Here are a few easy ways to remember them:
- 1993 - P
- Ninety-three rhymes with P.
- 1995 - S
- The '5' in '95' looks similar to an 'S'.
- 1997 - V
- V looks similar to a rotated '7'.
- 2000 - Y
- Y may remind you of 'Year 2000'.
Check digit calculation
Firstly, find the numerical value associated with each letter in the VIN. (I, O and Q are not allowed.) Digits use their own values.
A: 1 | J: 1 | |
B: 2 | K: 2 | S: 2 |
C: 3 | L: 3 | T: 3 |
D: 4 | M: 4 | U: 4 |
E: 5 | N: 5 | V: 5 |
F: 6 | W: 6 | |
G: 7 | P: 7 | X: 7 |
H: 8 | Y: 8 | |
R: 9 | Z: 9 |
Secondly, look up the weight factor for each position in the VIN except the 9th (the position of the check digit).
1st: ×8 | 5th: ×4 | 10th: ×9 | 14th: ×5 |
2nd: ×7 | 6th: ×3 | 11th: ×8 | 15th: ×4 |
3rd: ×6 | 7th: ×2 | 12th: ×7 | 16th: ×3 |
4th: ×5 | 8th: ×10 | 13th: ×6 | 17th: ×2 |
Thirdly, multiply the numbers and the numerical values of the letters by their assigned weight factor, and sum the resulting products. Divide the sum of the products by 11. The remainder is the check digit. If the remainder is 10, the check digit is the letter X.
Example
Consider the hypothetical VIN 1M8GDM9A_KP042788, where the underscore will be the check digit.
VIN: 1 M 8 G D M 9 A _ K P 0 4 2 7 8 8 Value: 1 4 8 7 4 4 9 1 0 2 7 0 4 2 7 8 8 Weight: 8 7 6 5 4 3 2 10 0 9 8 7 6 5 4 3 2 Products: 8 28 48 35 16 12 18 10 0 18 56 0 24 10 28 24 16
The sum of all 16 products is 351. Dividing by 11 gives a remainder of 10, so the check digit is "X" and the complete VIN is 1M8GDM9AXKP042788.
Perl source code
sub calcVINcheckdigit { my %lettervalue = ("A", 1, "B", 2, "C", 3, "D", 4, "E", 5, "F", 6, "G", 7, "H", 8, "J", 1, "K", 2, "L", 3, "M", 4, "N", 5, "P", 7, "R", 9, "S", 2, "T", 3, "U", 4, "V", 5, "W", 6, "X", 7, "Y", 8, "Z", 9, "1", 1, "2", 2, "3", 3, "4", 4, "5", 5, "6", 6, "7", 7, "8", 8, "9", 9, "0", 0); my @positionweight = (8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2); my @vinchar = split(//, $_[0]); my $total = 0; for (my $ctr = 0; $ctr < 17; $ctr++) { $total += $lettervalue{$vinchar[$ctr]} * $positionweight[$ctr]; } return (($total % 11) == 10) ? "X" : ($total % 11); }
PHP source code
function calcVINcheckdigit($vin){ //Uppercase to avoid errors $vin = strtoupper($vin); //$cv is the "converted value" of any digit $cv = array('A'=>1,'B'=>2,'C'=>3,'D'=>4,'E'=>5,'F'=>6,'G'=>7,'H'=>8,'J'=>1, 'K'=>2,'L'=>3,'M'=>4,'N'=>5,'P'=>7,'R'=>9,'S'=>2,'T'=>3,'U'=>4, 'V'=>5,'W'=>6,'X'=>7,'Y'=>8,'Z'=>9,'0'=>0,'1'=>1,'2'=>2,'3'=>3, '4'=>4,'5'=>5,'6'=>6,'7'=>7,'8'=>8,'9'=>9); //$multiplier is the number to multiply each digit by. $multiplier = array(8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2); $total = 0; for ($i=0; $i<17; $i++) { $total += $cv[$vin[$i]] * $multiplier[$i]; } //The idea is to get the remainder of $total/11 //The remainder can be 0-10. 0-9 are their digits, and 10=X return ($total%11 == 10)? 'X':($total%11); }
Python source code
import re def calc_vin_checkdigit(vin): """ Calculates the Vehicle Identification Number checkdigit """ char2value = dict(zip("ABCDEFGH", range(1,9)) + zip("JKLMN", range(1,6)) + zip("PR", [7,9]) + zip("STUVWXYZ", range(2,10)) + zip("0123456789", range(10)) + [["_", 0]] # transparently cope with '_' ) weight4position = (8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2) total = sum([ char2value[char] * weight4position[pos] for pos,char in enumerate(vin) ]) return (((total % 11) == 10) and "X") or str(total % 11) # Get an input like the example: 1M8GDM9A_KP042788 vin_no_check_digit = raw_input().strip().upper() # Check the format assert re.match("[A-HJ-NPR-Z0-9]{8}_[A-HJ-NPR-Z0-9]{8}$", vin_no_check_digit) vin = list(vin_no_check_digit) vin[8] = calc_vin_checkdigit(vin_no_check_digit) vin = ''.join(vin) print "The VIN of", vin_no_check_digit, "is", vin
Here is the program in use (python 2.4.2):
$ python Vehicle_identification_number.py 1m8gdm9a_kp042788 The VIN of 1M8GDM9A_KP042788 is 1M8GDM9AXKP042788
Ruby source code
# assumes that the vin string has already been validated to prevent # the submission of case-insensitive letters I, O and Q. Otherwise # nil errors will be thrown when searching the letter_value hash. def is_checkdigit_valid # find the numerical value associated with each letter in the VIN. # (I, O and Q are not allowed.) Digits use their own values. letter_value = {'A' => 1, 'B' => 2, 'C' => 3, 'D' => 4, 'E' => 5, 'F' => 6, 'G' => 7, 'H' => 8, 'J' => 1, 'K' => 2, 'L' => 3, 'M' => 4, 'N' => 5, 'P' => 7, 'R' => 9, 'S' => 2, 'T' => 3, 'U' => 4, 'V' => 5, 'W' => 6, 'X' => 7, 'Y' => 8, 'Z' => 9, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, '0' => 0} position_weight = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2] #uppercase to prevent nil errors when searching the hash vehicle_identification_number = vehicle_identification_number.upcase vin_chars = vehicle_identification_number.split(/\s*/) total = 0 for i in 0...17 total += letter_value[vin_chars[i]] * position_weight[i] end check_digit = ((total % 11) == 10) ? 'X' : (total % 11) vin_chars[8] == check_digit end
See also
- Daimler-Chrysler VIN codes
- List of Ford VIN codes
- List of GM VIN codes
- Honda VIN codes
- Land Rover VIN codes
- Mercedes-Benz VIN codes
- Subaru VIN codes
- Toyota VIN codes
- VIN Etching
External links
de:Fahrzeug-Identifizierungsnummer pl:Vehicle Identification Number zh:車輛識別號碼