ForHosting KIT · Validation

Validate a VIN check digit

Catch a mistyped VIN before it reaches a record: 1M8GDM9AXKP042788 passes because its ninth character, X, matches the calculated check digit. You also see the remainder behind the result. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Vin
1M8GDM9AXKP042788
You get
Provided check digit
X
Calculated check digit
X
Remainder
10

A Vehicle Identification Number contains a check digit that helps reveal transcription mistakes before a VIN enters a vehicle record, inventory system, insurance workflow, or service database. This validator applies the standard transliteration and positional weighting calculation to all 17 characters, computes the expected ninth character, and compares it with the character supplied. The result clearly reports whether the VIN passes, along with both check digits and the modulo remainder, without looking up or storing vehicle details.

What the VIN check digit can tell you

A modern VIN is a structured 17-character identifier, and its ninth position is reserved for a check digit in systems that apply the standard validation rule. This validator answers one focused question: does the ninth character agree with the other characters under the weighted transliteration calculation? A passing result is useful evidence that the identifier was copied consistently.

A failing result is a strong prompt to compare the VIN against the dashboard plate, certification label, registration document, or original source. It is not, however, proof that a vehicle is genuine, legally registered, or accurately described. A completely invented VIN can still be constructed with a mathematically correct check digit.

Likewise, manufacturer, market, or historical differences may affect whether a VIN uses the check digit convention. Treat this result as an input-quality control that catches many ordinary typing and scanning errors, then use authoritative vehicle records for identity, title, theft, recall, ownership, or specification questions.

How the weighted transliteration calculation works

The calculation first converts every allowed letter to a numeric value while digits retain their own values. Letters I, O, and Q are excluded from VINs because they can be confused with numerals. Each of the 17 numeric values is multiplied by the weight assigned to its position: 8, 7, 6, 5, 4, 3, 2, 10, zero for the check-digit position, then 9, 8, 7, 6, 5, 4, 3, and 2.

The products are added, and the sum is divided by 11. Its remainder becomes the expected check digit; remainders zero through nine use the matching numeral, while remainder 10 is represented by X. Giving the ninth position a weight of zero ensures that the supplied check digit does not influence its own calculation.

This capability returns the normalized uppercase VIN, the supplied ninth character, the calculated character, and the remainder, making the decision inspectable instead of returning only a bare true-or-false value.

Using validation safely in forms and automated workflows

Send the VIN exactly as a 17-character string. Lowercase letters are accepted and normalized to uppercase, but spaces, punctuation, decorative separators, and line breaks are not silently removed. That strict behavior is intentional: an integration should identify unexpected input rather than alter an identifier behind the scenes.

Inputs of any other length produce an invalid-input error, as do characters outside the VIN alphabet. A well-formed VIN with a mismatched check digit is different from malformed input, so it returns a normal result with valid set to false. This distinction lets a user interface explain whether the person must fix the field format or recheck the identifier itself.

In batch intake, preserve the original source beside the normalized result, route failed comparisons for review, and avoid rejecting legal or historical records solely from this calculation when their jurisdiction or model year may follow different rules.

Catch dealership inventory entry mistakes

Check a typed or scanned VIN before creating an inventory record, and send mismatches back for comparison with the vehicle.

Validate service booking forms

Distinguish malformed identifiers from well-formed VINs whose ninth character does not match the calculated check digit.

Screen imported vehicle records

Add a deterministic quality-control field to an import pipeline while keeping authoritative identity checks as a separate step.

Which character is the VIN check digit?

The check digit is the ninth character of the 17-character VIN. It may be a numeral from 0 to 9 or X.

Why can the calculated check digit be X?

The calculation uses modulo 11. When the remainder is 10, the standard representation for the check digit is X.

Does a valid check digit prove that the vehicle is genuine?

No. It checks mathematical consistency only. Use authoritative records for vehicle identity, title, ownership, theft, recalls, and specifications.

Are lowercase VIN letters accepted?

Yes. Letters are normalized to uppercase. Spaces and punctuation are not removed, and I, O, and Q are rejected.

What should I do if a VIN fails the check digit test?

Compare it character by character with the dashboard plate, the door label or the registration papers. A failed check usually points to a typing or scanning mistake, and the letters I, O and Q never appear in a valid VIN.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/misc2/vin-check-digit-validate

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/misc2/vin-check-digit-validate \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vin":"1M8GDM9AXKP042788"}'
{
  "vin": "1M8GDM9AXKP042788"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "misc2.vin_check_digit_validate",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.
What does VIN check digit validation cost?

The API costs $0.002 per request. The browser runner performs the same deterministic calculation free on this page.

Read the full KIT documentation →