Skip to content

How to decode a VIN: what all 17 characters mean

How to decode a VIN position by position: manufacturer code, vehicle descriptor, check digit maths with a worked example, model year codes and plant.

9 min read
Illustration: a 17-character VIN split into coloured blocks for manufacturer, vehicle descriptor, check digit, model year, plant and serial number

Here is how to decode a VIN: split its 17 characters into six parts: positions 1–3 are the manufacturer code (WMI), 4–8 describe the vehicle (model, body, engine), 9 is a check digit, 10 is the model year, 11 is the assembly plant and 12–17 are the serial number. The first three and the year code follow public tables; positions 4–8 and 11 are the manufacturer's own code, so you need its data (or a decoder such as NHTSA's vPIC) to read them.

This guide goes through each position with a real VIN, shows how to calculate the check digit by hand and in code, and explains the two traps that catch most people: the 30-year cycle of the year code and VINs from before 1981.

Key takeaways

  • A modern VIN has 17 characters and never uses the letters I, O or Q.
  • Positions 1–3 identify the manufacturer, 10 the model year and 11 the plant; 4–8 are the maker's own code.
  • The 9th character is a check digit that catches most typos; it is required on North American vehicles but not everywhere else.
  • The year code repeats every 30 years; for North American cars, a letter in position 7 means 2010 or later.
  • Cars built before 1981 have no standard VIN and often fewer than 17 characters.

How to decode a VIN: the 17 characters at a glance

Take 1HGCM82633A004352, a VIN that decodes cleanly in NHTSA's database: a 2003 Honda Accord EX-V6 coupe built in Marysville, Ohio. Here is how its characters split:

WMI 1–3
1HG: American Honda Motor Co., made in the USA
Vehicle descriptor 4–8
CM826: Accord coupe, 3.0 V6, as coded by Honda
Check digit 9
3: calculated from the other 16 characters
Model year 10
3: 2003
Plant 11
A: Marysville, Ohio
Serial number 12–17
004352: the production sequence
A VIN split into its parts. The decoded values come from NHTSA vPIC for this VIN.

The structure comes from ISO 3779 and, for vehicles sold in the US, from federal rules in 49 CFR Part 565. The US rules are stricter: they make the check digit and the model year code mandatory, which is why North American VINs are the easiest to decode and validate.

Three letters never appear anywhere in a 17-character VIN: I, O and Q, because they are too easy to confuse with 1 and 0. If a VIN in an ad contains an O, someone typed a zero wrong (or the VIN is fake).

Where to find the VIN on the car

Read it from at least two places and make sure they match: the plate at the bottom of the windscreen on the driver's side, the label on the driver's door pillar, and the registration or title document. Many cars also have it stamped on the bulkhead or a chassis rail in the engine bay. A label that is missing, painted over or held on with fresh glue deserves a closer look before you decode anything.

Copying matters more than it seems. Most VINs that "do not decode" are typos: a B read as an 8, an S as a 5, a zero typed as the letter O. The check digit below catches most of these.

Positions 1–3: the World Manufacturer Identifier

The first character shows the region and usually the country where the vehicle was built (not where the brand comes from). The first two or three together are the WMI, a code assigned to one manufacturer. A BMW built in South Carolina starts with 5U, a Honda built in Ohio with 1H, a Toyota built in Kentucky with 4T.

First character(s)Country of manufacture
1, 4, 5United States
2Canada
3Mexico
JJapan
KL–KRSouth Korea
LChina
SA–SMUnited Kingdom
VF–VRFrance
WGermany
YS–YWSweden
ZItaly
Common first characters. WMI codes are assigned through SAE International; NHTSA vPIC lists the ones registered for the US market.

A very small manufacturer does not get a full three-character code of its own. It gets a 9 in position 3, and positions 12–14 complete its identifier. Kit-car builders and small trailer makers are the usual examples.

To look a WMI up, NHTSA's vPIC has a DecodeWMI call: 1HG returns American Honda Motor Co., Inc., with the vehicle type passenger car.

Positions 4–8: the vehicle descriptor section

These five characters describe the vehicle: model line, body style, engine, restraint system and, for trucks, the weight class. Each manufacturer decides its own scheme and files it with NHTSA, so there is no universal table. In our Honda, Honda's own tables turn CM826 into an Accord EX-V6 coupe with a 3.0-litre V6; in a Ford truck the same five positions follow a different scheme entirely.

This is where a free online decoder earns its keep. vPIC holds the schemes manufacturers submitted for the US market and turns positions 4–8 into a model, body class, engine and so on. For cars built for other markets, coverage is patchy: a European-market Renault or a domestic-market Korean car often decodes to the make and little else. Our practical guide to the vPIC API shows what it returns and which fields tend to stay empty.

Position 9: how to calculate the check digit

The check digit is a number from 0 to 9, or X for 10, calculated from the other 16 characters. If one character is mistyped, the calculation almost always gives a different result, so a VIN whose 9th character does not match is wrong somewhere. The method, step by step:

  1. Turn each letter into a number with the transliteration table below. Digits keep their value.
  2. Multiply each of the 17 values by its position weight: 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2. Position 9 has weight 0, so the check digit itself does not count.
  3. Add the 17 products.
  4. Divide the sum by 11 and take the remainder. A remainder of 0–9 is the check digit; 10 is written as X.
LettersValue
A, J1
B, K, S2
C, L, T3
D, M, U4
E, N, V5
F, W6
G, P, X7
H, Y8
R, Z9
Letter values for the check digit. I, O and Q have no value because they are not allowed.

Worked example

For 1HGCM82633A004352:

PositionCharacterValueWeightProduct
11188
2H8756
3G7642
4C3515
5M4416
688324
72224
8661060
93300
1033927
11A188
120070
130060
1444520
1533412
1655315
172224
The check digit calculation for 1HGCM82633A004352. The products add up to 311.

311 divided by 11 is 28 with a remainder of 3 (28 × 11 = 308). The 9th character is 3, so the VIN passes. Change the year code from 3 to 4 (1HGCM82634A004352) and the sum becomes 320, the remainder 1, and the check fails. NHTSA's decoder reports exactly that as error code 1.

The same calculation in JavaScript, with the input checked before anything is computed:

JavaScript
const VALUES = {  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}const WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2] // Returns the expected 9th character, or null for a malformed VIN.function checkDigit(vin) {  const v = String(vin ?? '').trim().toUpperCase()  if (!/^[A-HJ-NPR-Z0-9]{17}$/.test(v)) return null  let sum = 0  for (let i = 0; i < 17; i++) {    const c = v[i]    const value = c >= '0' && c <= '9' ? Number(c) : VALUES[c]    sum += value * WEIGHTS[i]  }  const r = sum % 11  return r === 10 ? 'X' : String(r)} function hasValidCheckDigit(vin) {  const expected = checkDigit(vin)  return expected !== null &&    expected === String(vin).trim().toUpperCase()[8]} hasValidCheckDigit('1HGCM82633A004352') // truehasValidCheckDigit('1HGCM82634A004352') // falsecheckDigit('1M8GDM9AXKP042788')         // 'X'

Position 10: the model year code

The 10th character encodes the model year. It skips I, O and Q, and also U, Z and 0, which leaves 30 codes. After 30 years the cycle starts again, so A means 1980 or 2010, K means 1989 or 2019, and T means 1996 or 2026.

CodeModel yearor
A19802010
B19812011
C19822012
D19832013
E19842014
F19852015
G19862016
H19872017
J19882018
K19892019
L19902020
M19912021
N19922022
P19932023
R19942024
S19952025
T19962026
V19972027
W19982028
X19992029
Y20002030
120012031
220022032
320032033
420042034
520052035
620062036
720072037
820082038
920092039
Model year codes in position 10. Each code is used twice, 30 years apart.

Telling 1989 from 2019

Usually the car itself answers that, but software needs a rule. For passenger cars, multipurpose vehicles and light trucks built for North America, the US rules give one: if position 7 is a digit, the year is in the 1980–2009 cycle; if it is a letter, the year is in the 2010–2039 cycle. In 1HGCM82633A004352 position 7 is 2, so the 3 in position 10 means 2003. In 7FARW2H56JE022576, a Honda CR-V, position 7 is H, so the J in position 10 means 2018, not 1988.

JavaScript
const YEAR_CODES = 'ABCDEFGHJKLMNPRSTVWXY123456789' function modelYear(vin) {  const v = String(vin ?? '').trim().toUpperCase()  if (v.length !== 17) return null  const index = YEAR_CODES.indexOf(v[9])  if (index === -1) return null  const laterCycle = /[A-Z]/.test(v[6]) // position 7 is a letter  return (laterCycle ? 2010 : 1980) + index} modelYear('1HGCM82633A004352') // 2003modelYear('7FARW2H56JE022576') // 2018
The model year of a North American passenger car or light truck.

The rule does not apply to heavy trucks, and many cars built for other markets do not follow it, so outside North America check the year against the registration document. Also remember that a model year is not a production date: a 2019 model year car can be built in mid-2018.

Positions 11–17: plant and serial number

Position 11 is the assembly plant, coded by each manufacturer. Honda uses A for Marysville, Ohio; another maker's A is a different factory. vPIC returns the plant city, state and country when the manufacturer submitted them.

Positions 12–17 are the production sequence number. They make the VIN unique, and with the manufacturer's records they can tell you roughly when in the model year the car was built. For a small manufacturer with a 9 in position 3, positions 12–14 belong to the manufacturer code and only 15–17 are the serial.

Parts catalogues and dealers often ask only for the last eight characters, positions 10–17: year, plant and serial are enough for them to find the exact build. For anything else (a history check, an auction search, an insurance quote) use all 17, because the last eight alone can match cars of different makes.

VINs from before 1981

The 17-character format became mandatory in the US for the 1981 model year. Before that, each manufacturer had its own scheme, and VINs were often 11 to 13 characters long, sometimes fewer. There is no check digit, no standard year code and no WMI, so the decoding tables above do not apply. Classic-car clubs and the manufacturers' own records are the best source for those.

Decoders handle them unevenly. vPIC accepts a model year parameter for this reason: its documentation recommends always sending it, so the decoder knows whether to look in the modern or the pre-1980 ranges.

Common mistakes when decoding a VIN

  • Reading the brand's home country from position 1. A Kia built in Georgia, USA starts with 5, a BMW built in South Carolina with 5U. Position 1 is where the car was assembled.
  • Trusting the year code without position 7. Software that maps A straight to 1980 will show a 2010 car as thirty years older.
  • Treating a failed check digit on a European car as fraud. The check is only required for North America.
  • Expecting colour and options. They live in the manufacturer's build records, not in the VIN.
  • Using the decoded model as proof. A VIN plate can be moved from another car. Decoding shows what the VIN says; the history and an inspection show whether the car matches it.

Putting a decoded VIN to use

Decoding tells you what the car should be: make, model, year, body, engine, plant. It does not tell you what happened to it. Compare the decoded data with the car and the documents (a V6 VIN under a four-cylinder bonnet is a reason to stop), then check the history. For cars that passed through US salvage auctions, checking the auction history by VIN shows the lots, photos, damage and odometer readings; Pay per VIN does that lookup with a free first step that only says whether a record exists. If you are building a VIN check into your own site, validate the check digit before you call any API: /search-vin and the Pay per VIN calls expect all 17 characters, and a typo caught locally costs nothing.

Questions people ask

How can I decode a VIN for free?

Use NHTSA's vPIC decoder at vpic.nhtsa.dot.gov: enter the 17 characters and it returns the make, model, year, body, engine and plant where the manufacturer filed that data. It works best for vehicles built for the US market. For other cars, the manufacturer's dealer or official club can usually decode the descriptor section.

What does the 10th digit of a VIN mean?

It is the model year code. Letters A to Y (without I, O, Q, U and Z) stand for 1980 to 2000, digits 1 to 9 for 2001 to 2009, and the cycle repeats from 2010, so A is 1980 or 2010. On North American cars a letter in position 7 means the later cycle.

Can a VIN contain the letter O?

No. The letters I, O and Q are never used in a 17-character VIN because they look like 1 and 0. If you see an O, it is almost certainly a zero typed wrong. Older VINs from before 1981 followed manufacturer rules and may differ, but modern ones do not.

How do I know if a VIN is fake?

On a car built for North America, calculate the check digit: if the 9th character does not match, the VIN is mistyped or altered. Also compare the VIN on the windscreen plate, the door pillar and the documents, decode it and check that the model, engine and year match the car in front of you.

Does a VIN tell you the car's options and colour?

Rarely in full. Positions 4 to 8 usually encode the model, body, engine and safety equipment, but colour, trim packages and options are normally in the manufacturer's build records, not in the VIN. Some makers expose those through their own dealer tools; public decoders mostly do not.

© 2025. AuctionsAPI operates independently and is not affiliated with Copart, IAAI or Encar.