VIN Model Year Codes: The 10th Character Table
Decode the model year from the 10th VIN character, including the 30-year cycle and how to tell 1990s vehicles from 2020s vehicles.
The 10th character
Position 10 of a 17-character VIN encodes the model year. The sequence uses letters and digits, skipping I, O, Q, U, Z, and 0.
Extracting It Automatically
When you read this data from photos, the VIN OCR API returns it as structured JSON, and you can apply the rules on this page as validation. Try it with the free scanner.
Where This Fits
- The 30-year cycle: A=1980 or 2010, B=1981/2011, C=1982/2012, D=1983/2013, E=1984/2014, F=1985/2015, G=1986/2016, H=1987/2017, J=1988/2018, K=1989/2019, L=1990/2020, M=1991/2021, N=1992/2022, P=1993/2023, R=1994/2024, S=1995/2025, T=1996/2026, V=1997/2027, W=1998/2028, X=1999/2029, Y=2000/2030, then 1–9 for 2001–2009 and 2031–2039.
- Resolving the cycle: Because codes repeat every 30 years, combine the year code with other information, such as the vehicle’s age or the manufacturer’s use of position 7 in some passenger vehicles, to choose the right decade.
Extract It with the API
Read the document from a photo and validate the returned fields.
Prerequisite: Python 3.9+, `pip install requests`, and a STRUCTOCR_API_KEY
import base64
import os
import requests
with open("vin.jpg", "rb") as image_file:
image = base64.b64encode(image_file.read()).decode("ascii")
response = requests.post(
"https://api.structocr.com/v1/vin",
headers={"x-api-key": os.environ["STRUCTOCR_API_KEY"]},
json={"img": image},
timeout=30,
)
response.raise_for_status()
data = response.json()["data"]
print("vin:", data.get("vin"))
print("confidence:", data.get("confidence"))
print("carrier_type:", data.get("carrier_type"))Technical Specs
- •Endpoint: POST https://api.structocr.com/v1/vin
- •Authentication: x-api-key request header
- •Inputs: JPG, PNG, or WebP as Base64 JSON; maximum 4.5MB
- •Price: 1 credit per successful request; failed requests are not billed
- •Free trial: 200 free credits on sign-up, no credit card required
Key Features
- •The 30-year cycle: A=1980 or 2010, B=1981/2011, C=1982/2012, D=1983/2013, E=1984/2014, F=1985/2015, G=1986/2016, H=1987/2017, J=1988/2018, K=1989/2019, L=1990/2020, M=1991/2021, N=1992/2022, P=1993/2023, R=1994/2024, S=1995/2025, T=1996/2026, V=1997/2027, W=1998/2028, X=1999/2029, Y=2000/2030, then 1–9 for 2001–2009 and 2031–2039.
- •Resolving the cycle: Because codes repeat every 30 years, combine the year code with other information, such as the vehicle’s age or the manufacturer’s use of position 7 in some passenger vehicles, to choose the right decade.
- •Validate after OCR: Apply these rules to API output before storing it.
Reference Summary
Key facts from this page in structured form, for quick lookup.
{
"The 10th character": "Position 10 of a 17-character VIN encodes the model year.",
"The 30-year cycle": "A=1980 or 2010, B=1981/2011, C=1982/2012, D=1983/2013, E=1984/2014, F=1985/2015, G=1986/2016, H=1987/2017, J=1988/2018, K=1989/2019, L=1990/2020, M=1991/2021, N=1992/2022, P=1993/2023, R=1994/2024, S=1995/2025, T=1996/2026, V=1997/2027, W=1998/2028, X=1999/2029, Y=2000/2030, then 1–9 for 2001–2009 and 2031–2039..",
"Resolving the cycle": "Because codes repeat every 30 years, combine the year code with other information, such as the vehicle’s age or the manufacturer’s use of position 7 in some passenger vehicles, to choose the right decade.."
}Frequently Asked Questions
Is the model year the same as the build year?
No. A vehicle can be built in the calendar year before its model year.
Does StructOCR return the model year?
The VIN API returns the VIN itself. Decode the model year from position 10 in your code or with a VIN decoding service.
You May Also Like
Related tutorials, platform guides, and comparisons
Kia VIN Location and VIN OCR API
Where to find the VIN on a Kia, what its first characters mean, and how to read it from a photo with an API and decode the model year.
Subaru VIN Location and VIN OCR API
Where to find the VIN on a Subaru, what its first characters mean, and how to read it from a photo with an API and decode the model year.
VIN OCR API Pricing and Cost per Scan
What VIN OCR costs with StructOCR: 1 credit per successful scan, prepaid credits that never expire, and no charge for failed requests.
How to Choose a VIN OCR API in 2026
A practical checklist for evaluating VIN OCR APIs: coverage, accuracy on real photos, error handling, privacy, and cost per successful result.
Audi VIN Location and VIN OCR API
Where to find the VIN on a Audi, what its first characters mean, and how to read it from a photo with an API and decode the model year.
Node.js VIN OCR API
Tutorial: How to use the StructOCR Node.js SDK to extract data from VINs. Upload an image for a free test! Includes code samples and JSON schema.
Honda VIN Location and VIN OCR API
Where to find the VIN on a Honda, what its first characters mean, and how to read it from a photo with an API and decode the model year.
C# VIN OCR API
Upload an image for a free test! Tutorial: How to use the StructOCR C# Client to extract data from VIN (Vehicle Identification Number)s. Includes code samples and JSON schema.
Java VIN OCR API
Tutorial: How to use the StructOCR Java Client to extract data from VINs. Upload an image for a free test! Includes code samples and JSON schema.
Python VIN OCR API
Tutorial: How to use the StructOCR Python SDK to extract data from VIN (Vehicle Identification Number)s. Upload an image for a free test! Includes code samples and JSON schema.
Technical Comparisons & Integrations
Explore platform integrations and competitive analysis
OpenALPR vs. StructOCR API for VIN Decoding
Why traditional License Plate Recognition (ALPR) engines are not suitable for scanning Vehicle Identification Numbers (VINs).
Add VIN OCR to Your Replit App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a Replit application. Build automotive and fleet tools using Replit Agent and Secrets.
Add VIN OCR to Your v0 App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a v0 by Vercel app. Build automotive and fleet tools with zero backend.
VIN Barcode Scanner vs. VIN OCR API: Which is Better for Mobile Apps?
Deciding between local VIN barcode scanners and cloud-based VIN OCR API for your mobile app? Learn why OCR is the required fallback for damaged or chassis-stamped VINs.
Apple Vision Framework / ML Kit vs. StructOCR VIN API
Why generic on-device text recognition frameworks fail at decoding VINs, and when to switch to a specialized automotive API.
Add VIN OCR to Your Bolt.new App in 5 Minutes
Step-by-step guide to integrating the StructOCR VIN scanner API into a Bolt.new app. Build automotive and fleet tools right in your browser.
From tutorial to production in 5 minutes.
You've seen the code. Now get your API key, grab your 200 free credits, and see it work with your own images. No credit card required.