Vehicle Identification Number.
Seventeen characters, the fully published check-digit rail (ISO 3779 / 49 CFR 565.15), and public-domain decode rails.
The door-jamb barcode, blown out.
Code 39, as on the door jamb — the framing asterisks are the barcode's, not the vehicle's
VIN 1HGCM82633A004352
sum 311 (transliterated × the published weights)
check 311 mod 11 = 3 → position 9 is '3' — iso3779 mod11 passThe row.
| scheme | vin |
|---|---|
| grammar | 17 characters, I/O/Q excluded. WMI (positions 1–3, manufacturer), VDS (4–9; position 9 is the check digit in North America), VIS (10–17; position 10 model year, 11 plant, 12–17 serial). |
| check digit | ISO 3779 / 49 CFR 565.15 — published transliteration table, published weights (8 7 6 5 4 3 2 10 0 9 8 7 6 5 4 3 2), mod-11; remainder 10 renders as X. Typed failure surface: length | charset | checkdigit, with the exact expected position-9 character. |
| canonical form | The 17-character uppercase form, Code-39 framing stripped. |
| symbologies | Code 39 on the door jamb and glass; DataMatrix on newer plates |
| enrichment | NHTSA vPIC (public domain) · auto.dev — the family's owned vehicle data rail |
| join rule | A non-GS1 key served through the same resolver door, labeled as an extension in the description file — conformant to the standard; explicit about everything beyond it. |
| pinned digest | vin sha256:8cf780d7c6899d392e7fabdf2f2a1f71e9b56c2537730332bba72b4a9abd9eef |
| as data | /schemes/vin.json |
In practice.
The VIN is the fully published identifier: grammar, transliteration, weights and check rule all sit in public regulation, which is why verify on a VIN needs no license, no network and no account — and why a scratched door-jamb scan can be caught as a checkdigit failure naming the exact expected character.
On the blog.
-
VIN: the 17 characters the US government fully published
VIN structure and check digit are federal regulation — 49 CFR 565 — and NHTSA vPIC decodes about 140 attributes in the public domain. The best-documented identifier in the registry, worked in full: transliteration, weights, mod-11, and the typed failure surface a caller can branch on.
-
Scan the door jamb: VIN to vehicle, listing, and every other door
A door-jamb Code 39 scan resolves through the whole pipeline — validate, decode, linkset — with a typed failure at every step that can fail. The worked transcript, from framing strip and 49 CFR 565.15 arithmetic to the RFC 9264 linkset of live doors — history, recalls, sticker, valuation, transport.
-
A vehicle crosses the country: the full-family trace
One VIN exercises the entire stack — scan the door jamb for identity, book transport with custody events whose who is the attested driver and whose capturedBy is the carrier account, and watch escrow release on the delivery-confirmed event. Vehicle logistics is the family's most complete worked showcase, and the pattern generalizes to any high-value serialized unit.
Get an API key.
The local verbs run from npx barcoding.dev today with no key. A key opens the network half of the verb set.