Problems › JavaScript › validation
Verify a barcode
A scanner sometimes misreads a digit. The EAN-13 check digit catches most of those before the wrong product reaches the basket.
- The code is exactly thirteen digits.
- Counting from one, digits in odd positions count once and digits in even positions count three times.
- The code is valid when that total divides by ten.
- Anything not thirteen digits long, or containing a non-digit, is invalid.
barcodeValid(code: string) → bool
Where you start
function barcodeValid(code) {
}
Worked examples
| Call | Result |
|---|---|
barcodeValid("4006381333931") | true |
barcodeValid("4006381333932") | false |
barcodeValid("400638133393") | false |
barcodeValid("400638133393a") | false |
Hint
The check digit is the thirteenth and takes part in the sum like any other.
Reference solution in JavaScript
function barcodeValid(code) {
if (code.length !== 13) return false;
let sum = 0;
for (let i = 0; i < 13; i++) {
const c = code[i];
if (c < '0' || c > '9') return false;
const d = code.charCodeAt(i) - 48;
sum += i % 2 === 0 ? d : d * 3;
}
return sum % 10 === 0;
}