v vinfax.
Home / Learn / VIN decoder: check-digit math, WMI lookup, and model-year codes
VIN basics · Updated

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.

CharValueCharValueCharValueCharValue
A1J1S211
B2K2T322
C3L3U433
D4M4V544
E5N5W655
F6P7X766
G7R9Y877
H8Z988

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 123456789 1011121314151617
Weight 8765432100 98765432

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.

  1. Convert each of the 17 characters to its numeric value using the character value table above.
  2. Multiply each value by its position weight.
  3. Sum the 17 products. (Position 9's contribution is zero, so it cannot affect the sum.)
  4. 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.

PositionCharValueWeightProduct
11188
2F6742
3T3618
4F6530
5W6424
61133
7E5210
8T31030
940(check digit)
10D4936
11K2816
12E5735
1377642
1433515
1577428
161133
1788216
Sum356

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.

CodeModel yearCodeModel yearCodeModel year
A2010L202012001
B2011M202122002
C2012N202232003
D2013P202342004
E2014R202452005
F2015S202562006
G2016T202672007
H2017V202782008
J2018W202892009
K2019X2029
Y2030

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 prefixManufacturerCountry
1FA, 1FB, 1FC, 1FD, 1FM, 1FTFordUSA
1G1, 1G2, 1G3, 1G4, 1G6, 1G8, 1GC, 1GTGeneral Motors (Chevrolet, Pontiac, Olds, Buick, Cadillac, Saturn, GMC)USA
1HG, 19UHonda / AcuraUSA
1C3, 1C4, 1C6, 1J4, 1J8Chrysler / Jeep / DodgeUSA
1N4, 1N6NissanUSA
2FA, 2FB, 2FTFordCanada
3FA, 3FE, 3FRFordMexico
4F2, 4F4MazdaUSA
4S3, 4S4SubaruUSA
4T1, 4T3, 5TB, 5TD, 5TE, 5TFToyotaUSA
5N1, 5N3NissanUSA (SUV plant)
5YJ, 7SATeslaUSA
JF1, JF2SubaruJapan
JH4, JHMHonda / AcuraJapan
JM1, JM3MazdaJapan
JN1, JN6, JN8, JNK, JNRNissan / InfinitiJapan
JT2, JT4, JTD, JTE, JTH, JTJ, JTK, JTL, JTM, JTNToyota / LexusJapan
KM8, KMH, KNA, KND, KNMHyundai / KiaKorea
LFV, LVS, LVHFAW-VW, Lynk & Co, othersChina
SAJ, SALJaguar / Land RoverUK
VF1, VF3, VF7, VF8Renault / Citroën / PeugeotFrance
WAU, WA1AudiGermany
WBA, WBS, WBX, WBYBMWGermany
WDB, WDC, WDD, W1K, W1V, W1W, W1X, W1YMercedes-BenzGermany
WP0, WP1PorscheGermany
WVW, WV1, WV2, WV3VolkswagenGermany
YS2, YS3, YS4Saab / ScaniaSweden
YV1, YV4Volvo CarsSweden
ZAR, ZFAAlfa Romeo / FiatItaly
ZAM, ZHWMaserati / LamborghiniItaly
ZFFFerrariItaly

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.