The ninth character of a North American VIN is a check digit, mathematically derived from the other 16. This validator runs the exact NHTSA algorithm to confirm it matches, catching transposed or mistyped characters that would otherwise slip through. Everything happens in your browser.
How it works
Each character maps to a value, gets multiplied by a positional weight, and the weighted sum is reduced modulo 11:
value(char) per NHTSA transliteration table (A=1 … with I,O,Q excluded)
weights 8 7 6 5 4 3 2 10 0 9 8 7 6 5 4 3 2 (position 9 weight is 0)
sum Σ value(charᵢ) × weightᵢ
check digit sum mod 11, where 10 → "X"
valid computed check digit == character at position 9
The weight at position 9 is zero, so the check digit never feeds its own calculation. A remainder of 10 is written as X.
Example and tips
Take a VIN ending in a known-good check digit, swap any two adjacent characters, and the validator flips to invalid — that is exactly the class of error it is built to catch. Remember a legitimate non-North-American VIN may fail because it was never assigned a computed check digit, and that an X in position 9 is a normal, valid outcome, not an error.