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
Java needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
boolean barcodeValid(String 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 Java
boolean barcodeValid(String code) {
if (code.length() != 13) return false;
int sum = 0;
for (int i = 0; i < 13; i++) {
char c = code.charAt(i);
if (c < '0' || c > '9') return false;
int d = c - '0';
sum += (i % 2 == 0) ? d : d * 3;
}
return sum % 10 == 0;
}