World-class VIN decoder with comprehensive offline database (2,015+ WMI codes) and NHTSA vPIC API integration
Project description
NHTSA VIN Decoder
World-class VIN decoder with comprehensive offline database (2,015+ WMI codes) and NHTSA vPIC API integration
Author: Wal33D Email: aquataze@yahoo.com
โก Quick Start
Java - Offline Mode (No Internet Required)
import io.github.vindecoder.offline.OfflineVINDecoder;
import io.github.vindecoder.nhtsa.VehicleData;
OfflineVINDecoder decoder = new OfflineVINDecoder();
VehicleData vehicle = decoder.decode("1HGCM82633A004352");
System.out.println(vehicle.getModelYear() + " " +
vehicle.getMake() + " " +
vehicle.getModel());
// Output: 2003 Honda Accord
Python - With NHTSA API
from python.nhtsa_vin_decoder import NHTSAVinDecoder
decoder = NHTSAVinDecoder()
vehicle = decoder.decode("1HGCM82633A004352")
print(f"{vehicle.year} {vehicle.make} {vehicle.model}")
# Output: 2003 Honda Accord
Python - Offline Mode
from python.wmi_database import WMIDatabase
manufacturer = WMIDatabase.get_manufacturer("1HGCM82633A004352")
year = WMIDatabase.get_year("1HGCM82633A004352")
print(f"{year} {manufacturer}")
# Output: 2003 Honda
๐ฏ Overview
Advanced VIN decoder featuring both enhanced offline decoding capabilities and official NHTSA vPIC API integration. Provides complete vehicle specifications through manufacturer-specific decoders and a comprehensive WMI database with 2,015+ manufacturer codes.
โจ Features
- Enhanced Offline Decoder - Full VIN decoding without internet
- 2,015+ Manufacturer Codes - Comprehensive WMI database (6x industry standard)
- Manufacturer-Specific Decoders - Detailed model/trim/engine extraction
- VIN Validation - Check digit verification per ISO 3779
- Year Decoding - Accurate model year extraction (1980-2039)
- Official NHTSA API - Falls back to government database when online
- Automatic Fallback - Seamlessly switches between offline/online
- FREE - No API key required
- Caching - Built-in LRU cache to reduce API calls
- Multi-platform - Java/Android and Python implementations
๐ Directory Structure
nhtsa-vin-decoder/
โโโ java/io/github/vindecoder/
โ โโโ offline/ # Offline decoder implementation
โ โ โโโ OfflineVINDecoder.java # Main offline decoder
โ โ โโโ VINValidator.java # VIN validation & structure
โ โ โโโ WMIDatabase.java # 948+ manufacturer codes
โ โ โโโ MercedesBenzDecoder.java # Example manufacturer decoder
โ โโโ nhtsa/ # NHTSA API integration
โ โโโ VINDecoderService.java
โ โโโ VehicleData.java
โ โโโ NHTSAApiService.java
โโโ python/ # Python implementation
โ โโโ nhtsa_vin_decoder.py # Main decoder with API
โ โโโ wmi_database.py # Offline WMI database
โโโ data/ # Reference data (not used at runtime)
โ โโโ *.csv # Source WMI data from WALL-E/vin-decoder
โ โโโ process_wmi.py # Script to regenerate database
โ โโโ wmi_database_generated.java # Generated code
โโโ docs/ # Documentation
โโโ ADDING_DECODERS.md # Guide for adding manufacturers
โโโ VIN_DECODER_RESOURCES.md # External data sources
โโโ API.md # Complete API reference
โโโ INSTALLATION.md # Setup guide
โโโ USAGE.md # Examples and best practices
โโโ WMI_DATABASE.md # Offline database details
๐ What You Get
Offline Decoding (No Internet Required)
{
"vin": "4JGDA5HB7JB158144",
"make": "Mercedes-Benz",
"manufacturer": "Mercedes-Benz (Daimler AG)",
"model": "GLE-Class",
"year": "2018",
"trim": "GLE 350 4MATIC",
"vehicle_type": "Sport Utility Vehicle (SUV)",
"body_class": "Sport Utility Vehicle (SUV)",
"doors": "4",
"drive_type": "4MATIC",
"engine_model": "3.5L V6",
"engine_cylinders": "6",
"engine_displacement_l": "3.5",
"fuel_type": "Gasoline",
"transmission_style": "Automatic",
"transmission_speeds": "9",
"plant_city": "Tuscaloosa",
"plant_state": "Alabama",
"plant_country": "United States",
"gvwr": "6062",
"curb_weight": "4630"
}
Online Mode (Full NHTSA Data)
All of the above PLUS safety ratings, recalls, NCAP data, and more.
๐ป Quick Start
Java - Offline Mode (No Internet)
import io.github.vindecoder.offline.OfflineVINDecoder;
import io.github.vindecoder.nhtsa.VehicleData;
OfflineVINDecoder decoder = new OfflineVINDecoder();
VehicleData vehicle = decoder.decode("4JGDA5HB7JB158144");
System.out.println("Vehicle: " + vehicle.getModelYear() + " " +
vehicle.getMake() + " " + vehicle.getModel());
// Output: Vehicle: 2018 Mercedes-Benz GLE-Class
System.out.println("Trim: " + vehicle.getTrim());
// Output: Trim: GLE 350 4MATIC
System.out.println("Engine: " + vehicle.getEngineModel());
// Output: Engine: 3.5L V6
Java - With NHTSA API
VINDecoderService decoder = VINDecoderService.getInstance();
decoder.decodeVIN("4JGDA5HB7JB158144", new VINDecoderCallback() {
@Override
public void onSuccess(VehicleData vehicle) {
// Full NHTSA data returned
System.out.println("Vehicle: " + vehicle.getDisplayName());
}
@Override
public void onError(String error) {
// Automatically falls back to offline decoder
VehicleData vehicle = new OfflineVINDecoder().decode(vin);
}
});
๐งช Testing
Java (Year Decoding Test)
- Using Gradle (recommended):
./gradlew test
This runs JUnit tests validating VIN model year decoding across the 30-year cycle, including 2031โ2039 (digit codes with position 7 letter heuristic).
Python (Year Decoding Test)
- Run tests:
python3 tests/test_year.py
This validates the Python WMI fallback year-decoding heuristic matches the Java logic.
Python
from python.nhtsa_vin_decoder import NHTSAVinDecoder
decoder = NHTSAVinDecoder()
vehicle = decoder.decode("4JGDA5HB7JB158144")
print(f"Vehicle: {vehicle.year} {vehicle.make} {vehicle.model}")
# Output: Vehicle: 2018 Mercedes-Benz GLE-Class
๐ Offline Decoder Coverage
Global Manufacturer Support (2,015+ WMI Codes)
North America (Complete)
- United States: Ford, GM, Tesla, Rivian, Lucid
- Canada: All manufacturers
- Mexico: All manufacturers
Europe (Comprehensive)
- Germany: Mercedes-Benz, BMW, Audi, Porsche, Volkswagen
- Italy: Ferrari, Lamborghini, Alfa Romeo, Maserati
- UK: Jaguar, Land Rover, Aston Martin, Bentley, Rolls-Royce
- France: Renault, Peugeot, Citroรซn, Bugatti
Asia (Extensive)
- Japan: Toyota, Honda, Nissan, Mazda, Subaru, Mitsubishi
- Korea: Hyundai, Kia, Genesis
- China: BYD, NIO, XPeng, Geely, and 200+ manufacturers
Special Vehicle Types
- Motorcycles: Harley-Davidson, Yamaha, Honda, Ducati, BMW
- Commercial: Freightliner, Kenworth, Peterbilt, Mack
- Buses: Blue Bird, Thomas, Gillig
- Agricultural: John Deere
- Electric: Tesla, Rivian, Lucid, Polestar, Fisker
Manufacturer-Specific Decoders
Currently implemented:
- Mercedes-Benz: 115+ model variants with full specs
- Ford: 100+ model codes including F-Series, Mustang, Explorer, Edge
- GM: Chevrolet, Cadillac, Buick, GMC with RPO engine codes
- Toyota/Lexus: Comprehensive model and engine coverage
Easily extensible for:
- Honda, BMW, Nissan, etc.
- See ADDING_DECODERS.md for implementation guide
๐ Comparison
Current Capabilities (What We Actually Have)
| Feature | Our Offline Decoder | NHTSA API (Online) | Basic WMI Only |
|---|---|---|---|
| Manufacturer | โ 2,015+ codes | โ All | ~100-300 codes |
| Make | โ All from WMI | โ All | โ Limited |
| Model | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Year | โ 1980-2039 | โ All | โ |
| Trim/Series | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Engine Details | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Transmission | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Body Style | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Drive Type | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| Plant Location | โ Basic all | โ Detailed | โ |
| Weight Specs | โ Ford, GM, Toyota, Mercedes* | โ All | โ |
| VIN Validation | โ ISO 3779 | โ | Basic |
| Check Digit | โ Full validation | โ | โ |
| Region/Country | โ All | โ All | โ Basic |
| Safety Data | โ | โ NCAP ratings | โ |
| Recall Data | โ | โ | โ |
| Works Offline | โ Always | โ Needs internet | โ |
| Speed | <1ms | 200-500ms | <1ms |
| Free | โ | โ | โ |
*Can be extended to other manufacturers by adding decoders (see ADDING_DECODERS.md)
๐ Recent Improvements
Version 2.0 (October 2025)
- 6x More Coverage: Increased from 311 to 2,015+ WMI codes
- Fixed Year Bug: Now correctly decodes 2010+ model years
- 4 Manufacturer Decoders: Mercedes-Benz, Ford, GM, Toyota/Lexus with full specs
- Enhanced Validation: ISO 3779 check digit verification
- Extensible Architecture: Easy to add new manufacturers
- Reference Data: CSV sources included for transparency
๐ ๏ธ Installation
Java/Android
// Add as submodule
git submodule add https://github.com/Wal33D/nhtsa-vin-decoder.git modules/nhtsa-vin-decoder
// For NHTSA API support, add:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
Python
# No external dependencies for offline mode
from python.wmi_database import WMIDatabase
# For API support:
pip install requests # Optional, uses urllib by default
๐ Documentation
- ADDING_DECODERS.md - Add manufacturer-specific decoders
- VIN_DECODER_RESOURCES.md - External data sources
- API Reference - Complete API documentation
- WMI Database - Offline database details
๐ง Extending the Decoder
Adding a New Manufacturer Decoder
See ADDING_DECODERS.md for complete guide.
Quick example for Ford:
public class FordDecoder {
public static VehicleInfo decode(String vin) {
// Extract model codes, engine, transmission
// See MercedesBenzDecoder.java for reference
}
}
Updating WMI Database
cd data/
# Edit CSV files to add new codes
python3 process_wmi.py
# Copy generated code to WMIDatabase.java
๐งฉ Using As a Gradle Submodule
- Add this repo as a Git submodule, e.g. under
modules/nhtsa-vin-decoder. - In your root
settings.gradle(orsettings.gradle.kts) include the project:
include ':nhtsa-vin-decoder'
project(':nhtsa-vin-decoder').projectDir = new File(rootDir, 'modules/nhtsa-vin-decoder')
- In your app module
build.gradleadd a dependency:
implementation project(':nhtsa-vin-decoder')
- If you use the online NHTSA API classes, add runtime dependencies in your app:
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.google.code.gson:gson:2.10.1'
โก Performance
Speed Comparison
| Operation | Time | Throughput | Use Case |
|---|---|---|---|
| Offline Decode | <1ms | 1,000+ VINs/sec | Real-time apps, mobile |
| Online Decode | 200-500ms | ~2-5 VINs/sec | Complete data needed |
| Batch Offline | 0.5s/1000 VINs | 2,000 VINs/sec | Fleet management |
| Batch Online (parallel) | 10s/100 VINs | ~10 VINs/sec | Background processing |
Why Offline Mode is 500x Faster
Offline: VIN โ HashMap lookup โ Result (0.8ms)
Online: VIN โ HTTP request โ NHTSA server โ Response parsing โ Result (350ms)
Resource Usage
- Memory: ~100KB for WMI database (2,015+ codes)
- Storage: ~500KB total (includes manufacturer decoders)
- CPU: Negligible (<1% for typical usage)
- Network: Zero for offline mode, ~5KB per VIN for online
Real-World Performance Test
# Test: Decode 1,000 VINs
# Hardware: MacBook Pro M1, 16GB RAM
Offline mode: 0.534 seconds (1,873 VINs/sec)
Online mode: 342.8 seconds (2.9 VINs/sec)
Speedup: 642x faster
When to Use Each Mode
Use Offline Mode When:
- Speed is critical (<1ms response time)
- Working without internet connection
- Processing large batches (1,000+ VINs)
- Building mobile/embedded apps
- Need basic info (manufacturer, year, region)
Use Online Mode When:
- Need complete vehicle specifications
- Want safety ratings and recall data
- Require NCAP test results
- Need detailed engine/transmission specs
- Accuracy is more important than speed
๐ฏ Use Cases
- OBD-II Apps - Vehicle context without internet
- Fleet Management - Offline vehicle identification
- Insurance - Quick VIN validation
- Parts Lookup - Accurate model/engine matching
- Automotive Tools - Professional diagnostic apps
- Classic Cars - Decode vintage VINs (1980+)
๐ค Contributing
Found a missing WMI code or want to add a manufacturer decoder?
- Fork the repository
- Add codes to
data/*.csvor create new decoder injava/io/github/vindecoder/offline/ - Submit PR with test results
๐ License
MIT License - Free for commercial and non-commercial use
๐ง Contact
Wal33D - aquataze@yahoo.com Repository: https://github.com/Wal33D/nhtsa-vin-decoder
๐ Credits
- NHTSA for providing the free vPIC API
- WALL-E/vin-decoder for WMI CSV data
- ISO for VIN standards (ISO 3779:2009)
- US Department of Transportation
๐ฎ Roadmap
- Ford decoder (positions 4-8 patterns)
- GM/Chevrolet decoder
- Toyota/Lexus decoder
- Honda/Acura decoder
- BMW decoder (17-character patterns)
- Nissan/Infiniti decoder
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nhtsa_vin_decoder-0.1.0.tar.gz.
File metadata
- Download URL: nhtsa_vin_decoder-0.1.0.tar.gz
- Upload date:
- Size: 49.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad095f24b1ae05923eeae062cbe8159b9ab1ca9689f3c6674bbbf60b142bfe1b
|
|
| MD5 |
d427bbcec92ee8bea48a4c12fbdd55fd
|
|
| BLAKE2b-256 |
e9c69b9f0717782f8eb9fa2bc3376e4460a77c5788d572ff2086eee9726e88fd
|
File details
Details for the file nhtsa_vin_decoder-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nhtsa_vin_decoder-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5979832027ebe42d02b8e7a12f65cb0adeae63b3f4c5d8cedcec0e4b9ebb6478
|
|
| MD5 |
36c91d301fb77c47bd2dbc1b902340d0
|
|
| BLAKE2b-256 |
e8c0e915eed738801fcbbd63ecc1ccc40cdaba77553b25f782535d6b0db772ad
|