parse static method
Parses raw text into a vehicle VIN ScanResult.
Implementation
static ScanResult parse(String rawText) {
final match = _vinRegex.firstMatch(rawText.toUpperCase());
if (match != null) {
final vin = match.group(0)!;
final expectedCheckDigit = calculateCheckDigit(vin);
final actualCheckDigit = vin[8];
final isCheckDigitValid = expectedCheckDigit == actualCheckDigit;
final wmi = vin.substring(0, 3);
final manufacturer = _wmiMap[wmi] ?? 'Region/Manufacturer Code: $wmi';
final modelYear = decodeModelYear(vin[9]);
final vds = vin.substring(3, 8);
final vis = vin.substring(9, 17);
final verifications = {
'checkDigitValid': isCheckDigitValid,
'iso3779StructureValid': true,
'wmiManufacturerResolved': _wmiMap.containsKey(wmi),
};
return ScanResult(
mode: ScanMode.vin,
rawValue: vin,
isValid: isCheckDigitValid,
confidence: isCheckDigitValid ? 0.99 : 0.85,
fields: {
'Document Type': 'ISO 3779 Vehicle Identification Number',
'VIN Number': vin,
'Check Digit (Pos 9)':
'$actualCheckDigit (${isCheckDigitValid ? 'Valid ✓' : 'Invalid ✗'})',
'Check Digit Verification': isCheckDigitValid
? 'ISO 3779 Modulo 11 Validated ✓'
: 'Checksum Mismatch ✗',
'Manufacturer / WMI': manufacturer,
'World Manufacturer Identifier (WMI)': wmi,
'Vehicle Descriptor Section (VDS)': vds,
'Vehicle Identifier Section (VIS)': vis,
'Model Year (Pos 10)': modelYear,
'Plant Code (Pos 11)': vin[10],
'Sequential Number': vin.substring(11, 17),
},
verifications: verifications,
metadata: {
'vin': vin,
'wmi': wmi,
'isValidCheckDigit': isCheckDigitValid,
},
);
}
return ScanResult(
mode: ScanMode.vin,
rawValue: rawText,
isValid: false,
confidence: 0.3,
fields: {'Document Type': 'VIN Number (Unparsed)', 'Raw Input': rawText},
verifications: {'checkDigitValid': false, 'iso3779StructureValid': false},
);
}