@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.
- package/lib/commonjs/vinUtils.js +81 -73
- package/lib/commonjs/vinUtils.js.map +1 -1
- package/lib/module/vinUtils.js +81 -73
- package/lib/module/vinUtils.js.map +1 -1
- package/lib/typescript/src/types.d.ts +0 -4
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/vinUtils.d.ts +10 -4
- package/lib/typescript/src/vinUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/types.ts +0 -4
- package/src/vinUtils.ts +112 -124
package/lib/commonjs/vinUtils.js
CHANGED
|
@@ -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.
|
|
17
|
-
* 5.
|
|
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
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
*
|
|
204
|
+
* Only returns full 17-character VIN candidates
|
|
207
205
|
*/
|
|
208
|
-
const tokenizeCandidate =
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
372
|
-
}
|
|
373
|
-
|
|
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
|
-
|
|
379
|
+
|
|
380
|
+
// Invalid VINs should not be returned (handled by caller)
|
|
381
|
+
return 0;
|
|
376
382
|
};
|
|
377
|
-
const candidateFromBarcode = (detection, validateChecksum
|
|
383
|
+
const candidateFromBarcode = (detection, validateChecksum) => {
|
|
378
384
|
'worklet';
|
|
379
385
|
|
|
380
386
|
const values = new Set();
|
|
381
|
-
tokenizeCandidate(detection.rawValue ?? ''
|
|
382
|
-
tokenizeCandidate(detection.displayValue ?? ''
|
|
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).
|
|
385
|
-
|
|
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
|
|
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
|
|
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
|
|
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()).
|
|
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
|
|
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
|
|
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
|
|
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":[]}
|
package/lib/module/vinUtils.js
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.
|
|
11
|
-
* 5.
|
|
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
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
*
|
|
197
|
+
* Only returns full 17-character VIN candidates
|
|
200
198
|
*/
|
|
201
|
-
const tokenizeCandidate =
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
364
|
-
}
|
|
365
|
-
|
|
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
|
-
|
|
371
|
+
|
|
372
|
+
// Invalid VINs should not be returned (handled by caller)
|
|
373
|
+
return 0;
|
|
368
374
|
};
|
|
369
|
-
const candidateFromBarcode = (detection, validateChecksum
|
|
375
|
+
const candidateFromBarcode = (detection, validateChecksum) => {
|
|
370
376
|
'worklet';
|
|
371
377
|
|
|
372
378
|
const values = new Set();
|
|
373
|
-
tokenizeCandidate(detection.rawValue ?? ''
|
|
374
|
-
tokenizeCandidate(detection.displayValue ?? ''
|
|
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).
|
|
377
|
-
|
|
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
|
|
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
|
|
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
|
|
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()).
|
|
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
|
|
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
|
|
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
|
|
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":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EACV,KAAK,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,OAAO,GACP,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,GACT,aAAa,GACb,QAAQ,GACR,OAAO,GACP,KAAK,GACL,SAAS,GACT,IAAI,GACJ,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,aAAa,EAAE,CAAC;AAEjD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,sBAAsB,GACtB,gBAAgB,GAChB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7E,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,GAAG;IACvD,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B,OAAO,GACP,SAAS,GACT,YAAY,GACZ,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,MAAM,aAAa,GAAG;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACpE,UAAU,CAAC,EAAE,gBAAgB,GAAG,aAAa,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE;QACH,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI,EAC5C,KAAK,EAAE,eAAe,KACnB,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,GAAG,WAAW,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,CACZ,KAAK,EAAE,KAAK,EACZ,SAAS,CAAC,EAAE,iBAAiB,KAC1B,gBAAgB,EAAE,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,CACR,KAAK,EAAE,KAAK,EACZ,SAAS,CAAC,EAAE,sBAAsB,GAAG;QAAE,WAAW,CAAC,EAAE,gBAAgB,CAAA;KAAE,KACpE,aAAa,EAAE,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -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.
|
|
11
|
-
* 5.
|
|
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
|
|
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.
|
|
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.
|
|
11
|
-
* 5.
|
|
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
|
-
*
|
|
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
|
-
//
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
496
|
-
}
|
|
497
|
-
|
|
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
|
-
|
|
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 ?? ''
|
|
499
|
+
tokenizeCandidate(detection.rawValue ?? '').forEach((value) =>
|
|
511
500
|
values.add(value)
|
|
512
501
|
);
|
|
513
|
-
tokenizeCandidate(detection.displayValue ?? ''
|
|
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)
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
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
|
|
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())
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
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
|
}
|