Vehicle identification number

From Free net encyclopedia

(Redirected from VIN)
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.

WMIManufacturer
JAIsuzu
JFFuji Heavy Industries (Subaru)
JHHonda
JKKawasaki (motorcycles)
JMMazda
JNNissan
JSSuzuki
JTToyota
KLDaewoo
KMHHyundai
KNKia
SALLand Rover
SAJJaguar
SCCLotus Cars
TRUAudi
VF1Renault
VF3Peugeot
VF7Citroën
VSSSEAT
WAUAudi
WBABMW
WBSBMW M
WDBMercedes-Benz
WMWMINI
WP0Porsche
W0LOpel
WVWVolkswagen
WV1Volkswagen Commercial Vehicles
WV2Volkswagen Bus/Van
YK1Saab
YS3Saab
YV1Volvo Cars
ZDFFerrari Dino
ZFAFiat
ZFFFerrari
1FBFord Motor Company
1FCFord Motor Company
1FDFord Motor Company
1FMFord Motor Company
1FUFreightliner
1FVFreightliner
1F9FWD Corp.
1GGeneral Motors
1GCChevrolet
1GMPontiac
1HHonda USA
1LLincoln
1MEMercury
1M1Mack Truck
1M2Mack Truck
1M3Mack Truck
1M4Mack Truck
1NNissan USA
1VWVolkswagen USA
1YVMazda USA
2FBFord Motor Company Canada
2FCFord Motor Company Canada
2FMFord Motor Company Canada
2FTFord Motor Company Canada
2FUFreightliner
2FVFreightliner
2MMercury
2GGeneral Motors Canada
2G1Chevrolet Canada
2G2Pontiac Canada
2HMHyundai Canada
2TToyota Canada
2WKWestern Star
2WLWestern Star
2WMWestern Star
3FEFord Motor Company Mexico
3GGeneral Motors Mexico
3VWVolkswagen Mexico
9BWVolkswagen Brazil
4FMazda USA
4MMercury
4SSubaru-Isuzu Automotive
4USBMW USA
4UZFrt-Thomas Bus
4V1Volvo
4V2Volvo
4V3Volvo
4V4Volvo
4V5Volvo
4V6Volvo
4VLVolvo
4VMVolvo
4VZVolvo
5LLincoln
6FFord Motor Company Australia
6HGeneral Motors-Holden
6MMMitsubishi Motors Australia
6T1Toyota Australia
LTVToyota Tian Jin
LVSFord Chang An
LZMMAN China
LZUIsuzu Guangzhou

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: 1J: 1 
B: 2K: 2S: 2
C: 3L: 3T: 3
D: 4M: 4U: 4
E: 5N: 5V: 5
F: 6 W: 6
G: 7P: 7X: 7
H: 8 Y: 8
 R: 9Z: 9

Secondly, look up the weight factor for each position in the VIN except the 9th (the position of the check digit).

1st: ×85th: ×410th: ×914th: ×5
2nd: ×76th: ×311th: ×815th: ×4
3rd: ×67th: ×212th: ×716th: ×3
4th: ×58th: ×1013th: ×617th: ×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

External links

de:Fahrzeug-Identifizierungsnummer pl:Vehicle Identification Number zh:車輛識別號碼