parse static method

ScanResult parse(
  1. String rawText
)

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},
  );
}