VIN decoder: check-digit math, WMI lookup, and model-year codes
This is the technical VIN decoder reference: VIN structure position by position, weights, the SAE J272 character value table, a worked check-digit calculation on a real VIN, the full model-year code table, and a manufacturer codes lookup for the WMI prefixes most often seen in the vinfax archive. If you are new to VINs, start with our primer on what is a VIN for the friendly introduction and the interactive VIN decoder — this page is the reference manual you bookmark when you need to validate a VIN, or look up a manufacturer by WMI prefix, by hand.
The VIN at a glance
The VIN structure splits a modern 17-character VIN into three sections: the World Manufacturer Identifier (WMI) at positions 1-3, the Vehicle Descriptor Section (VDS) at positions 4-9, and the Vehicle Identifier Section (VIS) at positions 10-17. The 17-character VIN format has been mandatory on US-market vehicles since model year 1981 under FMVSS Part 565, harmonised internationally as ISO 3779. Every position uses uppercase A-Z and 0-9 with the letters I, O, and Q excluded from every position because they are visually ambiguous with 1 and 0. The check digit at position 9 makes VIN validation a closed-form arithmetic check.
Character value table (the math basis)
Any VIN decoder validating a VIN uses the SAE J272 character-to-value mapping from ISO 3779. Digits map to themselves; letters map to values 1-9 with gaps where the mapping would collide with adjacent letters or where the letters are not used at all. The values are not sequential through the alphabet.
| Char | Value | Char | Value | Char | Value | Char | Value |
|---|---|---|---|---|---|---|---|
A | 1 | J | 1 | S | 2 | 1 | 1 |
B | 2 | K | 2 | T | 3 | 2 | 2 |
C | 3 | L | 3 | U | 4 | 3 | 3 |
D | 4 | M | 4 | V | 5 | 4 | 4 |
E | 5 | N | 5 | W | 6 | 5 | 5 |
F | 6 | P | 7 | X | 7 | 6 | 6 |
G | 7 | R | 9 | Y | 8 | 7 | 7 |
H | 8 | — | — | Z | 9 | 8 | 8 |
Note the gaps: I, O, and Q are never used; N is 5 (skipping the missing O); P is 7 (skipping Q); R is 9 (jumping two slots). Digits 0-9 map to themselves.
Position weight table
Each of the 17 positions has a fixed weight. Position 9 has weight zero so the check digit is transparent to its own calculation.
| Position | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Weight | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 10 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
Weights run 8 down to 2 across positions 1-7, jump to 10 at position 8, drop to 0 at position 9, then restart at 9 and run down to 2 across positions 10-17.
How to calculate the check digit
Every VIN decoder runs the same four-step VIN validation procedure. Any valid 17-character VIN must satisfy it; if your computed check digit does not match the character at position 9, the VIN is invalid.
- Convert each of the 17 characters to its numeric value using the character value table above.
- Multiply each value by its position weight.
- Sum the 17 products. (Position 9's contribution is zero, so it cannot affect the sum.)
- Divide the sum by 11. The remainder is the expected check digit. If the remainder is 10, the check digit is written as the letter X.
Worked example on a real Ford F-150 VIN from the auction archive: 1FTFW1ET4DKE73718.
| Position | Char | Value | Weight | Product |
|---|---|---|---|---|
| 1 | 1 | 1 | 8 | 8 |
| 2 | F | 6 | 7 | 42 |
| 3 | T | 3 | 6 | 18 |
| 4 | F | 6 | 5 | 30 |
| 5 | W | 6 | 4 | 24 |
| 6 | 1 | 1 | 3 | 3 |
| 7 | E | 5 | 2 | 10 |
| 8 | T | 3 | 10 | 30 |
| 9 | 4 | — | 0 | (check digit) |
| 10 | D | 4 | 9 | 36 |
| 11 | K | 2 | 8 | 16 |
| 12 | E | 5 | 7 | 35 |
| 13 | 7 | 7 | 6 | 42 |
| 14 | 3 | 3 | 5 | 15 |
| 15 | 7 | 7 | 4 | 28 |
| 16 | 1 | 1 | 3 | 3 |
| 17 | 8 | 8 | 2 | 16 |
| Sum | 356 | |||
356 divided by 11 is 32 remainder 4. The actual character at position 9 is 4. Computed check digit matches, so the VIN is valid. If we had typed 1FTFW1ET5DKE73718 by mistake — changing position 9 to 5 — VIN validation would fail because the expected remainder is 4. The same applies to any single-character substitution elsewhere in the VIN: the math no longer closes.
Model year code table (position 10)
Position 10 is the model year. The model year code runs through a 30-character cycle, skipping I, O, Q, U, Z, and 0 for visual disambiguation. The codes repeat every 30 years, so the same letter that meant 1980 means 2010 and will mean 2040.
| Code | Model year | Code | Model year | Code | Model year |
|---|---|---|---|---|---|
A | 2010 | L | 2020 | 1 | 2001 |
B | 2011 | M | 2021 | 2 | 2002 |
C | 2012 | N | 2022 | 3 | 2003 |
D | 2013 | P | 2023 | 4 | 2004 |
E | 2014 | R | 2024 | 5 | 2005 |
F | 2015 | S | 2025 | 6 | 2006 |
G | 2016 | T | 2026 | 7 | 2007 |
H | 2017 | V | 2027 | 8 | 2008 |
J | 2018 | W | 2028 | 9 | 2009 |
K | 2019 | X | 2029 | — | — |
| — | — | Y | 2030 | — | — |
To disambiguate the two 30-year cycles, position 7 must be numeric for model years 2010-2039 and alphabetic for 1980-2009. Combined with position 10, that tells you whether an A at position 10 means a 1980 or 2010 vehicle.
WMI lookup: manufacturer codes by prefix
The first three characters — the WMI — encode region (position 1), country and manufacturer (positions 1-2), and the manufacturer's vehicle line (position 3). Position 1 ranges: 1-5 North America, 6-7 Oceania, 8-9 South America, A-H Africa, J-R Asia, S-Z Europe. Low-volume manufacturers (under 500 vehicles per year) use 9 at position 3 and encode their unique identifier at positions 12-14. Below is a WMI lookup of the manufacturer codes most frequently seen in the vinfax archive — not exhaustive, but covering the bulk of US-market salvage inventory.
| WMI prefix | Manufacturer | Country |
|---|---|---|
1FA, 1FB, 1FC, 1FD, 1FM, 1FT | Ford | USA |
1G1, 1G2, 1G3, 1G4, 1G6, 1G8, 1GC, 1GT | General Motors (Chevrolet, Pontiac, Olds, Buick, Cadillac, Saturn, GMC) | USA |
1HG, 19U | Honda / Acura | USA |
1C3, 1C4, 1C6, 1J4, 1J8 | Chrysler / Jeep / Dodge | USA |
1N4, 1N6 | Nissan | USA |
2FA, 2FB, 2FT | Ford | Canada |
3FA, 3FE, 3FR | Ford | Mexico |
4F2, 4F4 | Mazda | USA |
4S3, 4S4 | Subaru | USA |
4T1, 4T3, 5TB, 5TD, 5TE, 5TF | Toyota | USA |
5N1, 5N3 | Nissan | USA (SUV plant) |
5YJ, 7SA | Tesla | USA |
JF1, JF2 | Subaru | Japan |
JH4, JHM | Honda / Acura | Japan |
JM1, JM3 | Mazda | Japan |
JN1, JN6, JN8, JNK, JNR | Nissan / Infiniti | Japan |
JT2, JT4, JTD, JTE, JTH, JTJ, JTK, JTL, JTM, JTN | Toyota / Lexus | Japan |
KM8, KMH, KNA, KND, KNM | Hyundai / Kia | Korea |
LFV, LVS, LVH | FAW-VW, Lynk & Co, others | China |
SAJ, SAL | Jaguar / Land Rover | UK |
VF1, VF3, VF7, VF8 | Renault / Citroën / Peugeot | France |
WAU, WA1 | Audi | Germany |
WBA, WBS, WBX, WBY | BMW | Germany |
WDB, WDC, WDD, W1K, W1V, W1W, W1X, W1Y | Mercedes-Benz | Germany |
WP0, WP1 | Porsche | Germany |
WVW, WV1, WV2, WV3 | Volkswagen | Germany |
YS2, YS3, YS4 | Saab / Scania | Sweden |
YV1, YV4 | Volvo Cars | Sweden |
ZAR, ZFA | Alfa Romeo / Fiat | Italy |
ZAM, ZHW | Maserati / Lamborghini | Italy |
ZFF | Ferrari | Italy |
Why no I, O, Q (and sometimes U, Z, 0)
I, O, and Q are excluded from every position of any VIN — I collides with 1, O with 0, and Q with O. Their absence is what makes 17-character VINs survive being photocopied, handwritten on a tow sheet, or read off a smudged dashboard plate. The model-year position (10) additionally skips U, Z, and 0. A U, Z, or 0 in the year slot of a supposedly modern VIN is a mistype or a fabricated VIN.
Common VIN decoder errors and what they mean
- 16 or 18 characters. The VIN is mistyped — either a character was dropped or one was duplicated. Re-enter it from the dashboard plate.
- Contains I, O, or Q. A 1 or 0 was misread. The most common confusion is 0 vs O in handwriting.
- U, Z, or 0 at position 10. Either a mistype, or the VIN is fake. Real model-year codes never use those characters in the modern cycle.
- Check digit mismatch. Either a transcription error somewhere in the 17 characters, or — more concerning — a cloned or altered VIN. Worth running a VIN check against the archive before you trust the seller.
- Position 7 alphabetic on a "2020s" VIN. Position 7 must be a digit for model years 2010-2039. An alphabetic character there with a year code that implies a 2010+ vehicle is internally inconsistent.
Try it on your VIN
The math above is everything you need to validate a VIN by hand, but if you'd rather paste a VIN and let a VIN decoder do the work, the interactive tool on the what is a VIN primer page handles the calculation live as you type. If what you want is the auction history attached to that VIN — sale dates, damage codes, photos, prices — run a free VIN check against the archive. Or browse current inventory by make, model, and damage type. For title-brand background, see our salvage title and damage types guides.
Run a free VIN check → VIN primer + interactive decoder →
Related guides
Keep reading: what is a VIN for the friendlier primer, salvage title meaning, damage types at auction, and the broader inventory archive.