@mleonard9/vin-scanner 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,10 +13,12 @@ exports.resolveOptions = exports.pickBestCandidate = exports.isValidVin = export
13
13
  * 1. OCR Error Correction: Automatically corrects common OCR misreads (O/0, I/1, etc.)
14
14
  * 2. Context-Aware Detection: Looks for VIN prefixes like "VIN:", "Vehicle ID", etc.
15
15
  * 3. Check Digit Validation: Validates VINs using ISO 3779 standard algorithm
16
- * 4. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
17
- * 5. Multi-Level Processing: Extracts from element, line, and block level text
16
+ * 4. WMI Validation: Validates World Manufacturer Identifier for North America (US/Canada)
17
+ * 5. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
18
+ * 6. Multi-Level Processing: Extracts from element, line, and block level text
18
19
  *
19
20
  * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
21
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
20
22
  */
21
23
 
22
24
  const DEFAULT_RESOLVED_OPTIONS = {
@@ -33,8 +35,6 @@ const DEFAULT_RESOLVED_OPTIONS = {
33
35
  preferBarcode: true,
34
36
  validateChecksum: true,
35
37
  emitDuplicates: false,
36
- includePartialVins: false,
37
- minPartialLength: 13,
38
38
  maxFrameRate: 30,
39
39
  forceOrientation: null
40
40
  }
@@ -42,7 +42,7 @@ const DEFAULT_RESOLVED_OPTIONS = {
42
42
  const resolveOptions = options => {
43
43
  'worklet';
44
44
 
45
- var _options$detection, _options$detection2, _options$barcode, _options$barcode2, _options$text, _options$text2, _options$detection3, _options$detection4, _options$detection5, _options$detection6, _options$detection7, _options$detection8;
45
+ var _options$detection, _options$detection2, _options$barcode, _options$barcode2, _options$text, _options$text2, _options$detection3, _options$detection4, _options$detection5, _options$detection6;
46
46
  const resultMode = (options === null || options === void 0 || (_options$detection = options.detection) === null || _options$detection === void 0 ? void 0 : _options$detection.resultMode) ?? DEFAULT_RESOLVED_OPTIONS.detection.resultMode;
47
47
  const emitDuplicates = (options === null || options === void 0 || (_options$detection2 = options.detection) === null || _options$detection2 === void 0 ? void 0 : _options$detection2.emitDuplicates) ?? (resultMode === 'all' ? true : DEFAULT_RESOLVED_OPTIONS.detection.emitDuplicates);
48
48
  return {
@@ -59,10 +59,8 @@ const resolveOptions = options => {
59
59
  preferBarcode: (options === null || options === void 0 || (_options$detection3 = options.detection) === null || _options$detection3 === void 0 ? void 0 : _options$detection3.preferBarcode) ?? DEFAULT_RESOLVED_OPTIONS.detection.preferBarcode,
60
60
  validateChecksum: (options === null || options === void 0 || (_options$detection4 = options.detection) === null || _options$detection4 === void 0 ? void 0 : _options$detection4.validateChecksum) ?? DEFAULT_RESOLVED_OPTIONS.detection.validateChecksum,
61
61
  emitDuplicates,
62
- includePartialVins: (options === null || options === void 0 || (_options$detection5 = options.detection) === null || _options$detection5 === void 0 ? void 0 : _options$detection5.includePartialVins) ?? DEFAULT_RESOLVED_OPTIONS.detection.includePartialVins,
63
- minPartialLength: (options === null || options === void 0 || (_options$detection6 = options.detection) === null || _options$detection6 === void 0 ? void 0 : _options$detection6.minPartialLength) ?? DEFAULT_RESOLVED_OPTIONS.detection.minPartialLength,
64
- maxFrameRate: (options === null || options === void 0 || (_options$detection7 = options.detection) === null || _options$detection7 === void 0 ? void 0 : _options$detection7.maxFrameRate) ?? DEFAULT_RESOLVED_OPTIONS.detection.maxFrameRate,
65
- forceOrientation: (options === null || options === void 0 || (_options$detection8 = options.detection) === null || _options$detection8 === void 0 ? void 0 : _options$detection8.forceOrientation) ?? DEFAULT_RESOLVED_OPTIONS.detection.forceOrientation
62
+ maxFrameRate: (options === null || options === void 0 || (_options$detection5 = options.detection) === null || _options$detection5 === void 0 ? void 0 : _options$detection5.maxFrameRate) ?? DEFAULT_RESOLVED_OPTIONS.detection.maxFrameRate,
63
+ forceOrientation: (options === null || options === void 0 || (_options$detection6 = options.detection) === null || _options$detection6 === void 0 ? void 0 : _options$detection6.forceOrientation) ?? DEFAULT_RESOLVED_OPTIONS.detection.forceOrientation
66
64
  }
67
65
  };
68
66
  };
@@ -203,14 +201,12 @@ const extractWithContext = text => {
203
201
  /**
204
202
  * Tokenize and extract VIN candidates from raw text
205
203
  * Includes OCR error correction and context-aware extraction
206
- * Can optionally detect partial VINs (13-16 characters)
204
+ * Only returns full 17-character VIN candidates
207
205
  */
208
- const tokenizeCandidate = (value, options) => {
206
+ const tokenizeCandidate = value => {
209
207
  'worklet';
210
208
 
211
209
  const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
212
- const includePartial = (options === null || options === void 0 ? void 0 : options.includePartial) ?? false;
213
- const minPartialLength = (options === null || options === void 0 ? void 0 : options.minPartialLength) ?? 13;
214
210
  if (!value) {
215
211
  return [];
216
212
  }
@@ -224,13 +220,7 @@ const tokenizeCandidate = (value, options) => {
224
220
  const cleaned = normalized.replace(/[^A-Z0-9]/g, ' ');
225
221
  const tokens = cleaned.split(/\s+/).filter(token => token.length > 0);
226
222
  tokens.forEach(token => {
227
- // Check for partial VINs if enabled
228
- if (includePartial && token.length >= minPartialLength && token.length < 17) {
229
- const PARTIAL_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${token.length}}$`);
230
- if (PARTIAL_PATTERN.test(token)) {
231
- matches.add(token);
232
- }
233
- }
223
+ // Only process tokens that are at least 17 characters
234
224
  if (token.length < 17) {
235
225
  return;
236
226
  }
@@ -256,29 +246,35 @@ const tokenizeCandidate = (value, options) => {
256
246
  });
257
247
  }
258
248
  }
259
-
260
- // Also check for partial VINs at the start/end of longer strings
261
- if (includePartial) {
262
- for (let len = minPartialLength; len < 17 && len <= token.length; len += 1) {
263
- // Check start of token
264
- const startCandidate = token.slice(0, len);
265
- const START_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${len}}$`);
266
- if (START_PATTERN.test(startCandidate)) {
267
- matches.add(startCandidate);
268
- }
269
-
270
- // Check end of token
271
- if (token.length > len) {
272
- const endCandidate = token.slice(token.length - len);
273
- if (START_PATTERN.test(endCandidate)) {
274
- matches.add(endCandidate);
275
- }
276
- }
277
- }
278
- }
279
249
  });
280
250
  return Array.from(matches);
281
251
  };
252
+
253
+ /**
254
+ * Validate World Manufacturer Identifier (WMI) for North America (US and Canada)
255
+ * According to ISO 3780 standard:
256
+ * - 1, 4, 5 = United States
257
+ * - 2 = Canada
258
+ *
259
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
260
+ */
261
+ const isValidNorthAmericaWmi = value => {
262
+ 'worklet';
263
+
264
+ if (value.length < 1) {
265
+ return false;
266
+ }
267
+ const firstChar = value[0];
268
+ // North America: 1, 2 (Canada), 4, 5 (United States)
269
+ return firstChar === '1' || firstChar === '2' || firstChar === '4' || firstChar === '5';
270
+ };
271
+
272
+ /**
273
+ * Validate a VIN using ISO 3779 standard
274
+ * Includes checksum validation and North America WMI validation
275
+ *
276
+ * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
277
+ */
282
278
  const isValidVin = value => {
283
279
  'worklet';
284
280
 
@@ -286,6 +282,13 @@ const isValidVin = value => {
286
282
  if (!VIN_PATTERN.test(value)) {
287
283
  return false;
288
284
  }
285
+
286
+ // Validate North America WMI (US and Canada)
287
+ if (!isValidNorthAmericaWmi(value)) {
288
+ return false;
289
+ }
290
+
291
+ // Validate checksum digit
289
292
  const chars = value.split('');
290
293
  let sum = 0;
291
294
  for (let i = 0; i < chars.length; i += 1) {
@@ -358,42 +361,48 @@ const toBoundingBox = (candidate, preferred) => {
358
361
 
359
362
  /**
360
363
  * Calculate confidence score for a barcode-based VIN candidate
361
- * Barcodes are generally more reliable than text recognition
364
+ * Barcodes/QR codes are hard values, so they should always return 100% confidence
362
365
  */
363
366
  const calculateBarcodeConfidence = (value, validateChecksum) => {
364
367
  'worklet';
365
368
 
366
- let confidence = 0.85; // Base confidence for barcode
367
-
368
- // Check digit validation
369
+ // Barcodes/QR codes are hard values - always 100% confidence for valid VINs
369
370
  const checksumValid = isValidVin(value);
370
371
  if (checksumValid) {
371
- confidence = 0.98; // Very high confidence
372
- } else if (!validateChecksum) {
373
- confidence = 0.9; // Still high if validation disabled
372
+ return 1.0; // 100% confidence for valid VINs from barcodes
373
+ }
374
+
375
+ // If validation is disabled, still return high confidence
376
+ if (!validateChecksum) {
377
+ return 0.95;
374
378
  }
375
- return confidence;
379
+
380
+ // Invalid VINs should not be returned (handled by caller)
381
+ return 0;
376
382
  };
377
- const candidateFromBarcode = (detection, validateChecksum, options) => {
383
+ const candidateFromBarcode = (detection, validateChecksum) => {
378
384
  'worklet';
379
385
 
380
386
  const values = new Set();
381
- tokenizeCandidate(detection.rawValue ?? '', options).forEach(value => values.add(value));
382
- tokenizeCandidate(detection.displayValue ?? '', options).forEach(value => values.add(value));
387
+ tokenizeCandidate(detection.rawValue ?? '').forEach(value => values.add(value));
388
+ tokenizeCandidate(detection.displayValue ?? '').forEach(value => values.add(value));
383
389
  const boundingBox = toBoundingBox(detection, 'barcode');
384
- return Array.from(values).map(value => {
385
- const isPartial = value.length < 17;
390
+ return Array.from(values).filter(value => {
391
+ // Only return valid full VINs (17 characters that pass validation)
392
+ if (validateChecksum) {
393
+ return isValidVin(value);
394
+ }
395
+ // If validation is disabled, still only return 17-character VINs
396
+ return value.length === 17;
397
+ }).map(value => {
386
398
  const confidence = calculateBarcodeConfidence(value, validateChecksum);
387
399
  return {
388
400
  value,
389
401
  source: 'barcode',
390
- confidence: isPartial ? confidence * 0.7 : confidence,
391
- // Lower confidence for partial
402
+ confidence,
392
403
  boundingBox,
393
404
  origin: detection.displayValue ? 'displayValue' : 'rawValue',
394
- rawPayload: detection,
395
- isPartial,
396
- partialLength: isPartial ? value.length : undefined
405
+ rawPayload: detection
397
406
  };
398
407
  });
399
408
  };
@@ -434,7 +443,7 @@ const calculateTextConfidence = (value, rawText, origin, validateChecksum) => {
434
443
  // Cap at 0.98 (never 1.0 for text recognition)
435
444
  return Math.min(confidence, 0.98);
436
445
  };
437
- const candidateFromText = (detection, validateChecksum, options) => {
446
+ const candidateFromText = (detection, validateChecksum) => {
438
447
  'worklet';
439
448
 
440
449
  const valueMap = new Map();
@@ -457,7 +466,7 @@ const candidateFromText = (detection, validateChecksum, options) => {
457
466
  order
458
467
  }) => {
459
468
  if (text) {
460
- tokenizeCandidate(text, options).forEach(v => {
469
+ tokenizeCandidate(text).forEach(v => {
461
470
  var _valueMap$get;
462
471
  if (!valueMap.has(v) || (((_valueMap$get = valueMap.get(v)) === null || _valueMap$get === void 0 ? void 0 : _valueMap$get.order) ?? 999) > order) {
463
472
  valueMap.set(v, {
@@ -469,23 +478,26 @@ const candidateFromText = (detection, validateChecksum, options) => {
469
478
  }
470
479
  });
471
480
  const boundingBox = toBoundingBox(detection, 'line') ?? toBoundingBox(detection, 'element') ?? toBoundingBox(detection, 'block');
472
- return Array.from(valueMap.entries()).map(([value, {
481
+ return Array.from(valueMap.entries()).filter(([value]) => {
482
+ // Only return valid full VINs (17 characters that pass validation)
483
+ if (validateChecksum) {
484
+ return isValidVin(value);
485
+ }
486
+ // If validation is disabled, still only return 17-character VINs
487
+ return value.length === 17;
488
+ }).map(([value, {
473
489
  rawText
474
490
  }]) => {
475
491
  var _detection$elementTex, _detection$lineText;
476
492
  const origin = (_detection$elementTex = detection.elementText) !== null && _detection$elementTex !== void 0 && _detection$elementTex.includes(value) ? 'element' : (_detection$lineText = detection.lineText) !== null && _detection$lineText !== void 0 && _detection$lineText.includes(value) ? 'line' : 'block';
477
- const isPartial = value.length < 17;
478
493
  const confidence = calculateTextConfidence(value, rawText, origin, validateChecksum);
479
494
  return {
480
495
  value,
481
496
  source: 'text',
482
- confidence: isPartial ? confidence * 0.6 : confidence,
483
- // Lower confidence for partial
497
+ confidence,
484
498
  boundingBox,
485
499
  origin,
486
- rawPayload: detection,
487
- isPartial,
488
- partialLength: isPartial ? value.length : undefined
500
+ rawPayload: detection
489
501
  };
490
502
  });
491
503
  };
@@ -507,18 +519,14 @@ const buildVinCandidates = (payload, options) => {
507
519
  'worklet';
508
520
 
509
521
  const list = [];
510
- const partialOptions = {
511
- includePartial: options.detection.includePartialVins,
512
- minPartialLength: options.detection.minPartialLength
513
- };
514
522
  if (options.barcode.enabled) {
515
523
  (payload.barcodes ?? []).forEach(barcode => {
516
- list.push(...candidateFromBarcode(barcode, options.detection.validateChecksum, partialOptions));
524
+ list.push(...candidateFromBarcode(barcode, options.detection.validateChecksum));
517
525
  });
518
526
  }
519
527
  if (options.text.enabled) {
520
528
  (payload.textBlocks ?? []).forEach(textBlock => {
521
- list.push(...candidateFromText(textBlock, options.detection.validateChecksum, partialOptions));
529
+ list.push(...candidateFromText(textBlock, options.detection.validateChecksum));
522
530
  });
523
531
  }
524
532
  return dedupeCandidates(list);
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_RESOLVED_OPTIONS","barcode","enabled","formats","text","language","detection","resultMode","preferBarcode","validateChecksum","emitDuplicates","includePartialVins","minPartialLength","maxFrameRate","forceOrientation","resolveOptions","options","_options$detection","_options$detection2","_options$barcode","_options$barcode2","_options$text","_options$text2","_options$detection3","_options$detection4","_options$detection5","_options$detection6","_options$detection7","_options$detection8","length","exports","transliteration","A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z","weights","OCR_SUBSTITUTIONS","generateSubstitutionCandidates","value","maxSubstitutions","candidates","Set","positions","i","char","push","positionsToTry","slice","generate","current","posIndex","substitutionCount","add","pos","undefined","replacements","forEach","replacement","newValue","Array","from","extractWithContext","matches","VIN_PATTERN","patterns","pattern","match","exec","captured","replace","candidate","toUpperCase","test","tokenizeCandidate","includePartial","normalized","vin","cleaned","tokens","split","filter","token","PARTIAL_PATTERN","RegExp","hasSubstitutableChars","substitutions","sub","len","startCandidate","START_PATTERN","endCandidate","isValidVin","chars","sum","numeric","Number","parseInt","weight","remainder","expected","toString","checkDigit","toBoundingBox","preferred","maybe","top","bottom","left","right","width","height","block","blockBox","blockFrameTop","blockFrameBottom","blockFrameLeft","blockFrameRight","lineBox","lineFrameTop","lineFrameBottom","lineFrameLeft","lineFrameRight","elementBox","elementFrameTop","elementFrameBottom","elementFrameLeft","elementFrameRight","calculateBarcodeConfidence","confidence","checksumValid","candidateFromBarcode","values","rawValue","displayValue","boundingBox","map","isPartial","source","origin","rawPayload","partialLength","calculateTextConfidence","rawText","hasVinPrefix","Math","min","candidateFromText","valueMap","Map","elementText","order","lineText","blockText","resultText","v","_valueMap$get","has","get","set","entries","_detection$elementTex","_detection$lineText","includes","dedupeCandidates","_candidate$boundingBo","_candidate$boundingBo2","key","join","existing","buildVinCandidates","payload","list","partialOptions","barcodes","textBlocks","textBlock","pickBestCandidate","sorted","sort","a","b"],"sourceRoot":"../../src","sources":["vinUtils.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_RESOLVED_OPTIONS","barcode","enabled","formats","text","language","detection","resultMode","preferBarcode","validateChecksum","emitDuplicates","maxFrameRate","forceOrientation","resolveOptions","options","_options$detection","_options$detection2","_options$barcode","_options$barcode2","_options$text","_options$text2","_options$detection3","_options$detection4","_options$detection5","_options$detection6","length","exports","transliteration","A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z","weights","OCR_SUBSTITUTIONS","generateSubstitutionCandidates","value","maxSubstitutions","candidates","Set","positions","i","char","push","positionsToTry","slice","generate","current","posIndex","substitutionCount","add","pos","undefined","replacements","forEach","replacement","newValue","Array","from","extractWithContext","matches","VIN_PATTERN","patterns","pattern","match","exec","captured","replace","candidate","toUpperCase","test","tokenizeCandidate","normalized","vin","cleaned","tokens","split","filter","token","hasSubstitutableChars","substitutions","sub","isValidNorthAmericaWmi","firstChar","isValidVin","chars","sum","numeric","Number","parseInt","weight","remainder","expected","toString","checkDigit","toBoundingBox","preferred","maybe","top","bottom","left","right","width","height","block","blockBox","blockFrameTop","blockFrameBottom","blockFrameLeft","blockFrameRight","lineBox","lineFrameTop","lineFrameBottom","lineFrameLeft","lineFrameRight","elementBox","elementFrameTop","elementFrameBottom","elementFrameLeft","elementFrameRight","calculateBarcodeConfidence","checksumValid","candidateFromBarcode","values","rawValue","displayValue","boundingBox","map","confidence","source","origin","rawPayload","calculateTextConfidence","rawText","hasVinPrefix","Math","min","candidateFromText","valueMap","Map","elementText","order","lineText","blockText","resultText","v","_valueMap$get","has","get","set","entries","_detection$elementTex","_detection$lineText","includes","dedupeCandidates","_candidate$boundingBo","_candidate$boundingBo2","key","join","existing","buildVinCandidates","payload","list","barcodes","textBlocks","textBlock","pickBestCandidate","sorted","sort","a","b"],"sourceRoot":"../../src","sources":["vinUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -7,10 +7,12 @@
7
7
  * 1. OCR Error Correction: Automatically corrects common OCR misreads (O/0, I/1, etc.)
8
8
  * 2. Context-Aware Detection: Looks for VIN prefixes like "VIN:", "Vehicle ID", etc.
9
9
  * 3. Check Digit Validation: Validates VINs using ISO 3779 standard algorithm
10
- * 4. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
11
- * 5. Multi-Level Processing: Extracts from element, line, and block level text
10
+ * 4. WMI Validation: Validates World Manufacturer Identifier for North America (US/Canada)
11
+ * 5. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
12
+ * 6. Multi-Level Processing: Extracts from element, line, and block level text
12
13
  *
13
14
  * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
15
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
14
16
  */
15
17
 
16
18
  const DEFAULT_RESOLVED_OPTIONS = {
@@ -27,8 +29,6 @@ const DEFAULT_RESOLVED_OPTIONS = {
27
29
  preferBarcode: true,
28
30
  validateChecksum: true,
29
31
  emitDuplicates: false,
30
- includePartialVins: false,
31
- minPartialLength: 13,
32
32
  maxFrameRate: 30,
33
33
  forceOrientation: null
34
34
  }
@@ -36,7 +36,7 @@ const DEFAULT_RESOLVED_OPTIONS = {
36
36
  export const resolveOptions = options => {
37
37
  'worklet';
38
38
 
39
- var _options$detection, _options$detection2, _options$barcode, _options$barcode2, _options$text, _options$text2, _options$detection3, _options$detection4, _options$detection5, _options$detection6, _options$detection7, _options$detection8;
39
+ var _options$detection, _options$detection2, _options$barcode, _options$barcode2, _options$text, _options$text2, _options$detection3, _options$detection4, _options$detection5, _options$detection6;
40
40
  const resultMode = (options === null || options === void 0 || (_options$detection = options.detection) === null || _options$detection === void 0 ? void 0 : _options$detection.resultMode) ?? DEFAULT_RESOLVED_OPTIONS.detection.resultMode;
41
41
  const emitDuplicates = (options === null || options === void 0 || (_options$detection2 = options.detection) === null || _options$detection2 === void 0 ? void 0 : _options$detection2.emitDuplicates) ?? (resultMode === 'all' ? true : DEFAULT_RESOLVED_OPTIONS.detection.emitDuplicates);
42
42
  return {
@@ -53,10 +53,8 @@ export const resolveOptions = options => {
53
53
  preferBarcode: (options === null || options === void 0 || (_options$detection3 = options.detection) === null || _options$detection3 === void 0 ? void 0 : _options$detection3.preferBarcode) ?? DEFAULT_RESOLVED_OPTIONS.detection.preferBarcode,
54
54
  validateChecksum: (options === null || options === void 0 || (_options$detection4 = options.detection) === null || _options$detection4 === void 0 ? void 0 : _options$detection4.validateChecksum) ?? DEFAULT_RESOLVED_OPTIONS.detection.validateChecksum,
55
55
  emitDuplicates,
56
- includePartialVins: (options === null || options === void 0 || (_options$detection5 = options.detection) === null || _options$detection5 === void 0 ? void 0 : _options$detection5.includePartialVins) ?? DEFAULT_RESOLVED_OPTIONS.detection.includePartialVins,
57
- minPartialLength: (options === null || options === void 0 || (_options$detection6 = options.detection) === null || _options$detection6 === void 0 ? void 0 : _options$detection6.minPartialLength) ?? DEFAULT_RESOLVED_OPTIONS.detection.minPartialLength,
58
- maxFrameRate: (options === null || options === void 0 || (_options$detection7 = options.detection) === null || _options$detection7 === void 0 ? void 0 : _options$detection7.maxFrameRate) ?? DEFAULT_RESOLVED_OPTIONS.detection.maxFrameRate,
59
- forceOrientation: (options === null || options === void 0 || (_options$detection8 = options.detection) === null || _options$detection8 === void 0 ? void 0 : _options$detection8.forceOrientation) ?? DEFAULT_RESOLVED_OPTIONS.detection.forceOrientation
56
+ maxFrameRate: (options === null || options === void 0 || (_options$detection5 = options.detection) === null || _options$detection5 === void 0 ? void 0 : _options$detection5.maxFrameRate) ?? DEFAULT_RESOLVED_OPTIONS.detection.maxFrameRate,
57
+ forceOrientation: (options === null || options === void 0 || (_options$detection6 = options.detection) === null || _options$detection6 === void 0 ? void 0 : _options$detection6.forceOrientation) ?? DEFAULT_RESOLVED_OPTIONS.detection.forceOrientation
60
58
  }
61
59
  };
62
60
  };
@@ -196,14 +194,12 @@ const extractWithContext = text => {
196
194
  /**
197
195
  * Tokenize and extract VIN candidates from raw text
198
196
  * Includes OCR error correction and context-aware extraction
199
- * Can optionally detect partial VINs (13-16 characters)
197
+ * Only returns full 17-character VIN candidates
200
198
  */
201
- const tokenizeCandidate = (value, options) => {
199
+ const tokenizeCandidate = value => {
202
200
  'worklet';
203
201
 
204
202
  const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
205
- const includePartial = (options === null || options === void 0 ? void 0 : options.includePartial) ?? false;
206
- const minPartialLength = (options === null || options === void 0 ? void 0 : options.minPartialLength) ?? 13;
207
203
  if (!value) {
208
204
  return [];
209
205
  }
@@ -217,13 +213,7 @@ const tokenizeCandidate = (value, options) => {
217
213
  const cleaned = normalized.replace(/[^A-Z0-9]/g, ' ');
218
214
  const tokens = cleaned.split(/\s+/).filter(token => token.length > 0);
219
215
  tokens.forEach(token => {
220
- // Check for partial VINs if enabled
221
- if (includePartial && token.length >= minPartialLength && token.length < 17) {
222
- const PARTIAL_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${token.length}}$`);
223
- if (PARTIAL_PATTERN.test(token)) {
224
- matches.add(token);
225
- }
226
- }
216
+ // Only process tokens that are at least 17 characters
227
217
  if (token.length < 17) {
228
218
  return;
229
219
  }
@@ -249,29 +239,35 @@ const tokenizeCandidate = (value, options) => {
249
239
  });
250
240
  }
251
241
  }
252
-
253
- // Also check for partial VINs at the start/end of longer strings
254
- if (includePartial) {
255
- for (let len = minPartialLength; len < 17 && len <= token.length; len += 1) {
256
- // Check start of token
257
- const startCandidate = token.slice(0, len);
258
- const START_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${len}}$`);
259
- if (START_PATTERN.test(startCandidate)) {
260
- matches.add(startCandidate);
261
- }
262
-
263
- // Check end of token
264
- if (token.length > len) {
265
- const endCandidate = token.slice(token.length - len);
266
- if (START_PATTERN.test(endCandidate)) {
267
- matches.add(endCandidate);
268
- }
269
- }
270
- }
271
- }
272
242
  });
273
243
  return Array.from(matches);
274
244
  };
245
+
246
+ /**
247
+ * Validate World Manufacturer Identifier (WMI) for North America (US and Canada)
248
+ * According to ISO 3780 standard:
249
+ * - 1, 4, 5 = United States
250
+ * - 2 = Canada
251
+ *
252
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
253
+ */
254
+ const isValidNorthAmericaWmi = value => {
255
+ 'worklet';
256
+
257
+ if (value.length < 1) {
258
+ return false;
259
+ }
260
+ const firstChar = value[0];
261
+ // North America: 1, 2 (Canada), 4, 5 (United States)
262
+ return firstChar === '1' || firstChar === '2' || firstChar === '4' || firstChar === '5';
263
+ };
264
+
265
+ /**
266
+ * Validate a VIN using ISO 3779 standard
267
+ * Includes checksum validation and North America WMI validation
268
+ *
269
+ * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
270
+ */
275
271
  export const isValidVin = value => {
276
272
  'worklet';
277
273
 
@@ -279,6 +275,13 @@ export const isValidVin = value => {
279
275
  if (!VIN_PATTERN.test(value)) {
280
276
  return false;
281
277
  }
278
+
279
+ // Validate North America WMI (US and Canada)
280
+ if (!isValidNorthAmericaWmi(value)) {
281
+ return false;
282
+ }
283
+
284
+ // Validate checksum digit
282
285
  const chars = value.split('');
283
286
  let sum = 0;
284
287
  for (let i = 0; i < chars.length; i += 1) {
@@ -350,42 +353,48 @@ const toBoundingBox = (candidate, preferred) => {
350
353
 
351
354
  /**
352
355
  * Calculate confidence score for a barcode-based VIN candidate
353
- * Barcodes are generally more reliable than text recognition
356
+ * Barcodes/QR codes are hard values, so they should always return 100% confidence
354
357
  */
355
358
  const calculateBarcodeConfidence = (value, validateChecksum) => {
356
359
  'worklet';
357
360
 
358
- let confidence = 0.85; // Base confidence for barcode
359
-
360
- // Check digit validation
361
+ // Barcodes/QR codes are hard values - always 100% confidence for valid VINs
361
362
  const checksumValid = isValidVin(value);
362
363
  if (checksumValid) {
363
- confidence = 0.98; // Very high confidence
364
- } else if (!validateChecksum) {
365
- confidence = 0.9; // Still high if validation disabled
364
+ return 1.0; // 100% confidence for valid VINs from barcodes
365
+ }
366
+
367
+ // If validation is disabled, still return high confidence
368
+ if (!validateChecksum) {
369
+ return 0.95;
366
370
  }
367
- return confidence;
371
+
372
+ // Invalid VINs should not be returned (handled by caller)
373
+ return 0;
368
374
  };
369
- const candidateFromBarcode = (detection, validateChecksum, options) => {
375
+ const candidateFromBarcode = (detection, validateChecksum) => {
370
376
  'worklet';
371
377
 
372
378
  const values = new Set();
373
- tokenizeCandidate(detection.rawValue ?? '', options).forEach(value => values.add(value));
374
- tokenizeCandidate(detection.displayValue ?? '', options).forEach(value => values.add(value));
379
+ tokenizeCandidate(detection.rawValue ?? '').forEach(value => values.add(value));
380
+ tokenizeCandidate(detection.displayValue ?? '').forEach(value => values.add(value));
375
381
  const boundingBox = toBoundingBox(detection, 'barcode');
376
- return Array.from(values).map(value => {
377
- const isPartial = value.length < 17;
382
+ return Array.from(values).filter(value => {
383
+ // Only return valid full VINs (17 characters that pass validation)
384
+ if (validateChecksum) {
385
+ return isValidVin(value);
386
+ }
387
+ // If validation is disabled, still only return 17-character VINs
388
+ return value.length === 17;
389
+ }).map(value => {
378
390
  const confidence = calculateBarcodeConfidence(value, validateChecksum);
379
391
  return {
380
392
  value,
381
393
  source: 'barcode',
382
- confidence: isPartial ? confidence * 0.7 : confidence,
383
- // Lower confidence for partial
394
+ confidence,
384
395
  boundingBox,
385
396
  origin: detection.displayValue ? 'displayValue' : 'rawValue',
386
- rawPayload: detection,
387
- isPartial,
388
- partialLength: isPartial ? value.length : undefined
397
+ rawPayload: detection
389
398
  };
390
399
  });
391
400
  };
@@ -426,7 +435,7 @@ const calculateTextConfidence = (value, rawText, origin, validateChecksum) => {
426
435
  // Cap at 0.98 (never 1.0 for text recognition)
427
436
  return Math.min(confidence, 0.98);
428
437
  };
429
- const candidateFromText = (detection, validateChecksum, options) => {
438
+ const candidateFromText = (detection, validateChecksum) => {
430
439
  'worklet';
431
440
 
432
441
  const valueMap = new Map();
@@ -449,7 +458,7 @@ const candidateFromText = (detection, validateChecksum, options) => {
449
458
  order
450
459
  }) => {
451
460
  if (text) {
452
- tokenizeCandidate(text, options).forEach(v => {
461
+ tokenizeCandidate(text).forEach(v => {
453
462
  var _valueMap$get;
454
463
  if (!valueMap.has(v) || (((_valueMap$get = valueMap.get(v)) === null || _valueMap$get === void 0 ? void 0 : _valueMap$get.order) ?? 999) > order) {
455
464
  valueMap.set(v, {
@@ -461,23 +470,26 @@ const candidateFromText = (detection, validateChecksum, options) => {
461
470
  }
462
471
  });
463
472
  const boundingBox = toBoundingBox(detection, 'line') ?? toBoundingBox(detection, 'element') ?? toBoundingBox(detection, 'block');
464
- return Array.from(valueMap.entries()).map(([value, {
473
+ return Array.from(valueMap.entries()).filter(([value]) => {
474
+ // Only return valid full VINs (17 characters that pass validation)
475
+ if (validateChecksum) {
476
+ return isValidVin(value);
477
+ }
478
+ // If validation is disabled, still only return 17-character VINs
479
+ return value.length === 17;
480
+ }).map(([value, {
465
481
  rawText
466
482
  }]) => {
467
483
  var _detection$elementTex, _detection$lineText;
468
484
  const origin = (_detection$elementTex = detection.elementText) !== null && _detection$elementTex !== void 0 && _detection$elementTex.includes(value) ? 'element' : (_detection$lineText = detection.lineText) !== null && _detection$lineText !== void 0 && _detection$lineText.includes(value) ? 'line' : 'block';
469
- const isPartial = value.length < 17;
470
485
  const confidence = calculateTextConfidence(value, rawText, origin, validateChecksum);
471
486
  return {
472
487
  value,
473
488
  source: 'text',
474
- confidence: isPartial ? confidence * 0.6 : confidence,
475
- // Lower confidence for partial
489
+ confidence,
476
490
  boundingBox,
477
491
  origin,
478
- rawPayload: detection,
479
- isPartial,
480
- partialLength: isPartial ? value.length : undefined
492
+ rawPayload: detection
481
493
  };
482
494
  });
483
495
  };
@@ -499,18 +511,14 @@ export const buildVinCandidates = (payload, options) => {
499
511
  'worklet';
500
512
 
501
513
  const list = [];
502
- const partialOptions = {
503
- includePartial: options.detection.includePartialVins,
504
- minPartialLength: options.detection.minPartialLength
505
- };
506
514
  if (options.barcode.enabled) {
507
515
  (payload.barcodes ?? []).forEach(barcode => {
508
- list.push(...candidateFromBarcode(barcode, options.detection.validateChecksum, partialOptions));
516
+ list.push(...candidateFromBarcode(barcode, options.detection.validateChecksum));
509
517
  });
510
518
  }
511
519
  if (options.text.enabled) {
512
520
  (payload.textBlocks ?? []).forEach(textBlock => {
513
- list.push(...candidateFromText(textBlock, options.detection.validateChecksum, partialOptions));
521
+ list.push(...candidateFromText(textBlock, options.detection.validateChecksum));
514
522
  });
515
523
  }
516
524
  return dedupeCandidates(list);
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_RESOLVED_OPTIONS","barcode","enabled","formats","text","language","detection","resultMode","preferBarcode","validateChecksum","emitDuplicates","includePartialVins","minPartialLength","maxFrameRate","forceOrientation","resolveOptions","options","_options$detection","_options$detection2","_options$barcode","_options$barcode2","_options$text","_options$text2","_options$detection3","_options$detection4","_options$detection5","_options$detection6","_options$detection7","_options$detection8","length","transliteration","A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z","weights","OCR_SUBSTITUTIONS","generateSubstitutionCandidates","value","maxSubstitutions","candidates","Set","positions","i","char","push","positionsToTry","slice","generate","current","posIndex","substitutionCount","add","pos","undefined","replacements","forEach","replacement","newValue","Array","from","extractWithContext","matches","VIN_PATTERN","patterns","pattern","match","exec","captured","replace","candidate","toUpperCase","test","tokenizeCandidate","includePartial","normalized","vin","cleaned","tokens","split","filter","token","PARTIAL_PATTERN","RegExp","hasSubstitutableChars","substitutions","sub","len","startCandidate","START_PATTERN","endCandidate","isValidVin","chars","sum","numeric","Number","parseInt","weight","remainder","expected","toString","checkDigit","toBoundingBox","preferred","maybe","top","bottom","left","right","width","height","block","blockBox","blockFrameTop","blockFrameBottom","blockFrameLeft","blockFrameRight","lineBox","lineFrameTop","lineFrameBottom","lineFrameLeft","lineFrameRight","elementBox","elementFrameTop","elementFrameBottom","elementFrameLeft","elementFrameRight","calculateBarcodeConfidence","confidence","checksumValid","candidateFromBarcode","values","rawValue","displayValue","boundingBox","map","isPartial","source","origin","rawPayload","partialLength","calculateTextConfidence","rawText","hasVinPrefix","Math","min","candidateFromText","valueMap","Map","elementText","order","lineText","blockText","resultText","v","_valueMap$get","has","get","set","entries","_detection$elementTex","_detection$lineText","includes","dedupeCandidates","_candidate$boundingBo","_candidate$boundingBo2","key","join","existing","buildVinCandidates","payload","list","partialOptions","barcodes","textBlocks","textBlock","pickBestCandidate","sorted","sort","a","b"],"sourceRoot":"../../src","sources":["vinUtils.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_RESOLVED_OPTIONS","barcode","enabled","formats","text","language","detection","resultMode","preferBarcode","validateChecksum","emitDuplicates","maxFrameRate","forceOrientation","resolveOptions","options","_options$detection","_options$detection2","_options$barcode","_options$barcode2","_options$text","_options$text2","_options$detection3","_options$detection4","_options$detection5","_options$detection6","length","transliteration","A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z","weights","OCR_SUBSTITUTIONS","generateSubstitutionCandidates","value","maxSubstitutions","candidates","Set","positions","i","char","push","positionsToTry","slice","generate","current","posIndex","substitutionCount","add","pos","undefined","replacements","forEach","replacement","newValue","Array","from","extractWithContext","matches","VIN_PATTERN","patterns","pattern","match","exec","captured","replace","candidate","toUpperCase","test","tokenizeCandidate","normalized","vin","cleaned","tokens","split","filter","token","hasSubstitutableChars","substitutions","sub","isValidNorthAmericaWmi","firstChar","isValidVin","chars","sum","numeric","Number","parseInt","weight","remainder","expected","toString","checkDigit","toBoundingBox","preferred","maybe","top","bottom","left","right","width","height","block","blockBox","blockFrameTop","blockFrameBottom","blockFrameLeft","blockFrameRight","lineBox","lineFrameTop","lineFrameBottom","lineFrameLeft","lineFrameRight","elementBox","elementFrameTop","elementFrameBottom","elementFrameLeft","elementFrameRight","calculateBarcodeConfidence","checksumValid","candidateFromBarcode","values","rawValue","displayValue","boundingBox","map","confidence","source","origin","rawPayload","calculateTextConfidence","rawText","hasVinPrefix","Math","min","candidateFromText","valueMap","Map","elementText","order","lineText","blockText","resultText","v","_valueMap$get","has","get","set","entries","_detection$elementTex","_detection$lineText","includes","dedupeCandidates","_candidate$boundingBo","_candidate$boundingBo2","key","join","existing","buildVinCandidates","payload","list","barcodes","textBlocks","textBlock","pickBestCandidate","sorted","sort","a","b"],"sourceRoot":"../../src","sources":["vinUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -61,8 +61,6 @@ export type VinCandidate = {
61
61
  boundingBox?: BoundingBox;
62
62
  origin?: 'rawValue' | 'displayValue' | 'block' | 'line' | 'element';
63
63
  rawPayload?: BarcodeDetection | TextDetection;
64
- isPartial?: boolean;
65
- partialLength?: number;
66
64
  };
67
65
  export type VinScannerEvent = {
68
66
  mode: VinResultMode;
@@ -87,8 +85,6 @@ export type DetectionOptions = {
87
85
  preferBarcode?: boolean;
88
86
  validateChecksum?: boolean;
89
87
  emitDuplicates?: boolean;
90
- includePartialVins?: boolean;
91
- minPartialLength?: number;
92
88
  /**
93
89
  * Maximum frame rate (in FPS) at which the frame processor should execute.
94
90
  * Frames that arrive faster than this budget are dropped to keep the
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,12 @@
7
7
  * 1. OCR Error Correction: Automatically corrects common OCR misreads (O/0, I/1, etc.)
8
8
  * 2. Context-Aware Detection: Looks for VIN prefixes like "VIN:", "Vehicle ID", etc.
9
9
  * 3. Check Digit Validation: Validates VINs using ISO 3779 standard algorithm
10
- * 4. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
11
- * 5. Multi-Level Processing: Extracts from element, line, and block level text
10
+ * 4. WMI Validation: Validates World Manufacturer Identifier for North America (US/Canada)
11
+ * 5. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
12
+ * 6. Multi-Level Processing: Extracts from element, line, and block level text
12
13
  *
13
14
  * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
15
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
14
16
  */
15
17
  import type { DetectionOptions, FrameOrientation, ScanBarcodeOptions, TextRecognitionLanguage, VinCandidate, VinResultMode, VinScannerOptions, WorkletPayload } from './types';
16
18
  export type ResolvedVinScannerOptions = {
@@ -24,13 +26,17 @@ export type ResolvedVinScannerOptions = {
24
26
  };
25
27
  detection: Required<DetectionOptions> & {
26
28
  resultMode: VinResultMode;
27
- includePartialVins: boolean;
28
- minPartialLength: number;
29
29
  maxFrameRate: number;
30
30
  forceOrientation: FrameOrientation | null;
31
31
  };
32
32
  };
33
33
  export declare const resolveOptions: (options?: VinScannerOptions) => ResolvedVinScannerOptions;
34
+ /**
35
+ * Validate a VIN using ISO 3779 standard
36
+ * Includes checksum validation and North America WMI validation
37
+ *
38
+ * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
39
+ */
34
40
  export declare const isValidVin: (value: string) => boolean;
35
41
  export declare const buildVinCandidates: (payload: WorkletPayload, options: ResolvedVinScannerOptions) => VinCandidate[];
36
42
  export declare const pickBestCandidate: (candidates: VinCandidate[], options: ResolvedVinScannerOptions) => VinCandidate | null;
@@ -1 +1 @@
1
- {"version":3,"file":"vinUtils.d.ts","sourceRoot":"","sources":["../../../src/vinUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAElB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,uBAAuB,CAAC;KACnC,CAAC;IACF,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG;QACtC,UAAU,EAAE,aAAa,CAAC;QAC1B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;KAC3C,CAAC;CACH,CAAC;AAuBF,eAAO,MAAM,cAAc,GACzB,UAAU,iBAAiB,KAC1B,yBA+CF,CAAC;AAgPF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OA6B1C,CAAC;AAwQF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,SAAS,yBAAyB,KACjC,YAAY,EA+Bd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,YAAY,YAAY,EAAE,EAC1B,SAAS,yBAAyB,KACjC,YAAY,GAAG,IAejB,CAAC"}
1
+ {"version":3,"file":"vinUtils.d.ts","sourceRoot":"","sources":["../../../src/vinUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAEV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAElB,uBAAuB,EACvB,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE;QACP,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,kBAAkB,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,uBAAuB,CAAC;KACnC,CAAC;IACF,SAAS,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG;QACtC,UAAU,EAAE,aAAa,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;KAC3C,CAAC;CACH,CAAC;AAqBF,eAAO,MAAM,cAAc,GACzB,UAAU,iBAAiB,KAC1B,yBAyCF,CAAC;AA+NF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OAoC1C,CAAC;AAoRF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,cAAc,EACvB,SAAS,yBAAyB,KACjC,YAAY,EAmBd,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,YAAY,YAAY,EAAE,EAC1B,SAAS,yBAAyB,KACjC,YAAY,GAAG,IAejB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mleonard9/vin-scanner",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "High-performance VIN scanner for React Native Vision Camera powered by Google ML Kit barcode + text recognition.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/types.ts CHANGED
@@ -100,8 +100,6 @@ export type VinCandidate = {
100
100
  boundingBox?: BoundingBox;
101
101
  origin?: 'rawValue' | 'displayValue' | 'block' | 'line' | 'element';
102
102
  rawPayload?: BarcodeDetection | TextDetection;
103
- isPartial?: boolean; // True if VIN is incomplete (< 17 characters)
104
- partialLength?: number; // Length of partial VIN if isPartial is true
105
103
  };
106
104
 
107
105
  export type VinScannerEvent = {
@@ -130,8 +128,6 @@ export type DetectionOptions = {
130
128
  preferBarcode?: boolean;
131
129
  validateChecksum?: boolean;
132
130
  emitDuplicates?: boolean;
133
- includePartialVins?: boolean; // Allow detection of incomplete VINs (13-16 chars)
134
- minPartialLength?: number; // Minimum length for partial VINs (default: 13)
135
131
  /**
136
132
  * Maximum frame rate (in FPS) at which the frame processor should execute.
137
133
  * Frames that arrive faster than this budget are dropped to keep the
package/src/vinUtils.ts CHANGED
@@ -7,10 +7,12 @@
7
7
  * 1. OCR Error Correction: Automatically corrects common OCR misreads (O/0, I/1, etc.)
8
8
  * 2. Context-Aware Detection: Looks for VIN prefixes like "VIN:", "Vehicle ID", etc.
9
9
  * 3. Check Digit Validation: Validates VINs using ISO 3779 standard algorithm
10
- * 4. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
11
- * 5. Multi-Level Processing: Extracts from element, line, and block level text
10
+ * 4. WMI Validation: Validates World Manufacturer Identifier for North America (US/Canada)
11
+ * 5. Smart Confidence Scoring: Assigns reliability scores based on multiple factors
12
+ * 6. Multi-Level Processing: Extracts from element, line, and block level text
12
13
  *
13
14
  * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
15
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
14
16
  */
15
17
 
16
18
  import type {
@@ -37,8 +39,6 @@ export type ResolvedVinScannerOptions = {
37
39
  };
38
40
  detection: Required<DetectionOptions> & {
39
41
  resultMode: VinResultMode;
40
- includePartialVins: boolean;
41
- minPartialLength: number;
42
42
  maxFrameRate: number;
43
43
  forceOrientation: FrameOrientation | null;
44
44
  };
@@ -58,8 +58,6 @@ const DEFAULT_RESOLVED_OPTIONS: ResolvedVinScannerOptions = {
58
58
  preferBarcode: true,
59
59
  validateChecksum: true,
60
60
  emitDuplicates: false,
61
- includePartialVins: false,
62
- minPartialLength: 13,
63
61
  maxFrameRate: 30,
64
62
  forceOrientation: null,
65
63
  },
@@ -100,12 +98,6 @@ export const resolveOptions = (
100
98
  options?.detection?.validateChecksum ??
101
99
  DEFAULT_RESOLVED_OPTIONS.detection.validateChecksum,
102
100
  emitDuplicates,
103
- includePartialVins:
104
- options?.detection?.includePartialVins ??
105
- DEFAULT_RESOLVED_OPTIONS.detection.includePartialVins,
106
- minPartialLength:
107
- options?.detection?.minPartialLength ??
108
- DEFAULT_RESOLVED_OPTIONS.detection.minPartialLength,
109
101
  maxFrameRate:
110
102
  options?.detection?.maxFrameRate ??
111
103
  DEFAULT_RESOLVED_OPTIONS.detection.maxFrameRate,
@@ -262,16 +254,11 @@ const extractWithContext = (text: string): string[] => {
262
254
  /**
263
255
  * Tokenize and extract VIN candidates from raw text
264
256
  * Includes OCR error correction and context-aware extraction
265
- * Can optionally detect partial VINs (13-16 characters)
257
+ * Only returns full 17-character VIN candidates
266
258
  */
267
- const tokenizeCandidate = (
268
- value: string,
269
- options?: { includePartial?: boolean; minPartialLength?: number }
270
- ): string[] => {
259
+ const tokenizeCandidate = (value: string): string[] => {
271
260
  'worklet';
272
261
  const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
273
- const includePartial = options?.includePartial ?? false;
274
- const minPartialLength = options?.minPartialLength ?? 13;
275
262
 
276
263
  if (!value) {
277
264
  return [];
@@ -288,18 +275,7 @@ const tokenizeCandidate = (
288
275
  const tokens = cleaned.split(/\s+/).filter((token) => token.length > 0);
289
276
 
290
277
  tokens.forEach((token) => {
291
- // Check for partial VINs if enabled
292
- if (
293
- includePartial &&
294
- token.length >= minPartialLength &&
295
- token.length < 17
296
- ) {
297
- const PARTIAL_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${token.length}}$`);
298
- if (PARTIAL_PATTERN.test(token)) {
299
- matches.add(token);
300
- }
301
- }
302
-
278
+ // Only process tokens that are at least 17 characters
303
279
  if (token.length < 17) {
304
280
  return;
305
281
  }
@@ -325,41 +301,53 @@ const tokenizeCandidate = (
325
301
  });
326
302
  }
327
303
  }
328
-
329
- // Also check for partial VINs at the start/end of longer strings
330
- if (includePartial) {
331
- for (
332
- let len = minPartialLength;
333
- len < 17 && len <= token.length;
334
- len += 1
335
- ) {
336
- // Check start of token
337
- const startCandidate = token.slice(0, len);
338
- const START_PATTERN = new RegExp(`^[A-HJ-NPR-Z0-9]{${len}}$`);
339
- if (START_PATTERN.test(startCandidate)) {
340
- matches.add(startCandidate);
341
- }
342
-
343
- // Check end of token
344
- if (token.length > len) {
345
- const endCandidate = token.slice(token.length - len);
346
- if (START_PATTERN.test(endCandidate)) {
347
- matches.add(endCandidate);
348
- }
349
- }
350
- }
351
- }
352
304
  });
353
305
 
354
306
  return Array.from(matches);
355
307
  };
356
308
 
309
+ /**
310
+ * Validate World Manufacturer Identifier (WMI) for North America (US and Canada)
311
+ * According to ISO 3780 standard:
312
+ * - 1, 4, 5 = United States
313
+ * - 2 = Canada
314
+ *
315
+ * @see https://en.wikibooks.org/wiki/Vehicle_Identification_Numbers_(VIN_codes)/World_Manufacturer_Identifier_(WMI)
316
+ */
317
+ const isValidNorthAmericaWmi = (value: string): boolean => {
318
+ 'worklet';
319
+ if (value.length < 1) {
320
+ return false;
321
+ }
322
+ const firstChar = value[0];
323
+ // North America: 1, 2 (Canada), 4, 5 (United States)
324
+ return (
325
+ firstChar === '1' ||
326
+ firstChar === '2' ||
327
+ firstChar === '4' ||
328
+ firstChar === '5'
329
+ );
330
+ };
331
+
332
+ /**
333
+ * Validate a VIN using ISO 3779 standard
334
+ * Includes checksum validation and North America WMI validation
335
+ *
336
+ * @see https://en.wikipedia.org/wiki/Vehicle_identification_number
337
+ */
357
338
  export const isValidVin = (value: string): boolean => {
358
339
  'worklet';
359
340
  const VIN_PATTERN = /^[A-HJ-NPR-Z0-9]{17}$/;
360
341
  if (!VIN_PATTERN.test(value)) {
361
342
  return false;
362
343
  }
344
+
345
+ // Validate North America WMI (US and Canada)
346
+ if (!isValidNorthAmericaWmi(value)) {
347
+ return false;
348
+ }
349
+
350
+ // Validate checksum digit
363
351
  const chars = value.split('');
364
352
  let sum = 0;
365
353
  for (let i = 0; i < chars.length; i += 1) {
@@ -480,54 +468,61 @@ const toBoundingBox = (
480
468
 
481
469
  /**
482
470
  * Calculate confidence score for a barcode-based VIN candidate
483
- * Barcodes are generally more reliable than text recognition
471
+ * Barcodes/QR codes are hard values, so they should always return 100% confidence
484
472
  */
485
473
  const calculateBarcodeConfidence = (
486
474
  value: string,
487
475
  validateChecksum: boolean
488
476
  ): number => {
489
477
  'worklet';
490
- let confidence = 0.85; // Base confidence for barcode
491
-
492
- // Check digit validation
478
+ // Barcodes/QR codes are hard values - always 100% confidence for valid VINs
493
479
  const checksumValid = isValidVin(value);
494
480
  if (checksumValid) {
495
- confidence = 0.98; // Very high confidence
496
- } else if (!validateChecksum) {
497
- confidence = 0.9; // Still high if validation disabled
481
+ return 1.0; // 100% confidence for valid VINs from barcodes
482
+ }
483
+
484
+ // If validation is disabled, still return high confidence
485
+ if (!validateChecksum) {
486
+ return 0.95;
498
487
  }
499
488
 
500
- return confidence;
489
+ // Invalid VINs should not be returned (handled by caller)
490
+ return 0;
501
491
  };
502
492
 
503
493
  const candidateFromBarcode = (
504
494
  detection: BarcodeDetection,
505
- validateChecksum: boolean,
506
- options?: { includePartial?: boolean; minPartialLength?: number }
495
+ validateChecksum: boolean
507
496
  ): VinCandidate[] => {
508
497
  'worklet';
509
498
  const values = new Set<string>();
510
- tokenizeCandidate(detection.rawValue ?? '', options).forEach((value) =>
499
+ tokenizeCandidate(detection.rawValue ?? '').forEach((value) =>
511
500
  values.add(value)
512
501
  );
513
- tokenizeCandidate(detection.displayValue ?? '', options).forEach((value) =>
502
+ tokenizeCandidate(detection.displayValue ?? '').forEach((value) =>
514
503
  values.add(value)
515
504
  );
516
505
  const boundingBox = toBoundingBox(detection, 'barcode');
517
- return Array.from(values).map((value) => {
518
- const isPartial = value.length < 17;
519
- const confidence = calculateBarcodeConfidence(value, validateChecksum);
520
- return {
521
- value,
522
- source: 'barcode' as const,
523
- confidence: isPartial ? confidence * 0.7 : confidence, // Lower confidence for partial
524
- boundingBox,
525
- origin: detection.displayValue ? 'displayValue' : 'rawValue',
526
- rawPayload: detection,
527
- isPartial,
528
- partialLength: isPartial ? value.length : undefined,
529
- };
530
- });
506
+ return Array.from(values)
507
+ .filter((value) => {
508
+ // Only return valid full VINs (17 characters that pass validation)
509
+ if (validateChecksum) {
510
+ return isValidVin(value);
511
+ }
512
+ // If validation is disabled, still only return 17-character VINs
513
+ return value.length === 17;
514
+ })
515
+ .map((value) => {
516
+ const confidence = calculateBarcodeConfidence(value, validateChecksum);
517
+ return {
518
+ value,
519
+ source: 'barcode' as const,
520
+ confidence,
521
+ boundingBox,
522
+ origin: detection.displayValue ? 'displayValue' : 'rawValue',
523
+ rawPayload: detection,
524
+ };
525
+ });
531
526
  };
532
527
 
533
528
  /**
@@ -574,8 +569,7 @@ const calculateTextConfidence = (
574
569
 
575
570
  const candidateFromText = (
576
571
  detection: TextDetection,
577
- validateChecksum: boolean,
578
- options?: { includePartial?: boolean; minPartialLength?: number }
572
+ validateChecksum: boolean
579
573
  ): VinCandidate[] => {
580
574
  'worklet';
581
575
  const valueMap = new Map<string, { rawText: string; order: number }>();
@@ -588,7 +582,7 @@ const candidateFromText = (
588
582
  { text: detection.resultText, order: 4 },
589
583
  ].forEach(({ text, order }) => {
590
584
  if (text) {
591
- tokenizeCandidate(text, options).forEach((v) => {
585
+ tokenizeCandidate(text).forEach((v) => {
592
586
  if (!valueMap.has(v) || (valueMap.get(v)?.order ?? 999) > order) {
593
587
  valueMap.set(v, { rawText: text, order });
594
588
  }
@@ -601,32 +595,38 @@ const candidateFromText = (
601
595
  toBoundingBox(detection, 'element') ??
602
596
  toBoundingBox(detection, 'block');
603
597
 
604
- return Array.from(valueMap.entries()).map(([value, { rawText }]) => {
605
- const origin = detection.elementText?.includes(value)
606
- ? 'element'
607
- : detection.lineText?.includes(value)
608
- ? 'line'
609
- : 'block';
610
-
611
- const isPartial = value.length < 17;
612
- const confidence = calculateTextConfidence(
613
- value,
614
- rawText,
615
- origin,
616
- validateChecksum
617
- );
618
-
619
- return {
620
- value,
621
- source: 'text' as const,
622
- confidence: isPartial ? confidence * 0.6 : confidence, // Lower confidence for partial
623
- boundingBox,
624
- origin,
625
- rawPayload: detection,
626
- isPartial,
627
- partialLength: isPartial ? value.length : undefined,
628
- };
629
- });
598
+ return Array.from(valueMap.entries())
599
+ .filter(([value]) => {
600
+ // Only return valid full VINs (17 characters that pass validation)
601
+ if (validateChecksum) {
602
+ return isValidVin(value);
603
+ }
604
+ // If validation is disabled, still only return 17-character VINs
605
+ return value.length === 17;
606
+ })
607
+ .map(([value, { rawText }]) => {
608
+ const origin = detection.elementText?.includes(value)
609
+ ? 'element'
610
+ : detection.lineText?.includes(value)
611
+ ? 'line'
612
+ : 'block';
613
+
614
+ const confidence = calculateTextConfidence(
615
+ value,
616
+ rawText,
617
+ origin,
618
+ validateChecksum
619
+ );
620
+
621
+ return {
622
+ value,
623
+ source: 'text' as const,
624
+ confidence,
625
+ boundingBox,
626
+ origin,
627
+ rawPayload: detection,
628
+ };
629
+ });
630
630
  };
631
631
 
632
632
  const dedupeCandidates = (candidates: VinCandidate[]): VinCandidate[] => {
@@ -653,30 +653,18 @@ export const buildVinCandidates = (
653
653
  ): VinCandidate[] => {
654
654
  'worklet';
655
655
  const list: VinCandidate[] = [];
656
- const partialOptions = {
657
- includePartial: options.detection.includePartialVins,
658
- minPartialLength: options.detection.minPartialLength,
659
- };
660
656
 
661
657
  if (options.barcode.enabled) {
662
658
  (payload.barcodes ?? []).forEach((barcode) => {
663
659
  list.push(
664
- ...candidateFromBarcode(
665
- barcode,
666
- options.detection.validateChecksum,
667
- partialOptions
668
- )
660
+ ...candidateFromBarcode(barcode, options.detection.validateChecksum)
669
661
  );
670
662
  });
671
663
  }
672
664
  if (options.text.enabled) {
673
665
  (payload.textBlocks ?? []).forEach((textBlock) => {
674
666
  list.push(
675
- ...candidateFromText(
676
- textBlock,
677
- options.detection.validateChecksum,
678
- partialOptions
679
- )
667
+ ...candidateFromText(textBlock, options.detection.validateChecksum)
680
668
  );
681
669
  });
682
670
  }