Look at any GTIN and the last digit is doing a different job from the rest. The company prefix and item reference identify the product; the final digit identifies nothing — it is calculated from all the preceding digits, and its only purpose is to prove that the number was read, typed, or printed correctly. That digit is the check digit, and the calculation behind it is the GS1 Modulo-10 algorithm.
The Modulo-10 recipe
The algorithm is the same for GTIN-8, GTIN-12, GTIN-13, GTIN-14, and other GS1 keys such as GLN and SSCC. Take the number without its check digit. Starting from the rightmost digit and moving left, multiply the digits alternately by 3 and by 1 — the rightmost digit always gets the 3. Add up all the products. The check digit is whatever must be added to that sum to reach the next multiple of ten; if the sum is already a multiple of ten, the check digit is 0.
A worked example
Take the twelve data digits 095060001343. From the right, the multipliers run 3, 1, 3, 1 and so on, so the products are: 3×3=9, 4×1=4, 3×3=9, 1×1=1, 0×3=0, 0×1=0, 0×3=0, 6×1=6, 0×3=0, 5×1=5, 9×3=27, and the leftmost 0×1=0. Adding them: 9+4+9+1+0+0+0+6+0+5+27+0 = 61. The next multiple of ten is 70, and 70 − 61 = 9 — so the check digit is 9, and the complete, valid GTIN-13 is 0950600013439.
Verification runs the same arithmetic in reverse: recompute the check digit from the first twelve digits and compare. Any disagreement means the number as read is not the number that was issued — a mistyped digit, a misread bar, a damaged label — and the transaction should stop there rather than propagate a wrong identity into stock, orders, or a patient record.
Sum 61 → next multiple of ten is 70 → check digit 9 → complete number 0950600013439
What a check digit catches — and what it cannot
The algorithm is tuned to the errors humans and scanners actually make. It catches every single-digit error: change any one digit and the check digit no longer matches. It also catches most adjacent transpositions — typing 43 instead of 34 — with one known blind spot: transposed pairs whose digits differ by five (such as 16 and 61) can pass undetected, an accepted limitation of the 3-and-1 weighting.
What a check digit cannot do is just as important. It cannot tell you which digit is wrong, only that the number is inconsistent. And it cannot detect a wrong-but-valid number: if two errors combine into another number whose check digit happens to match, or a completely different valid GTIN is scanned, arithmetic has no way to know. A passing check digit means "internally consistent", not "the right product" — that confirmation still belongs to the database lookup.
The wider family: Modulo-43 and Modulo-103
GTINs are not the only symbols with self-checking built in. Code 39 can carry a Modulo-43 check character: each character has a value, the values are summed, and the remainder modulo 43 becomes the check character. Code 128 goes further — a Modulo-103 checksum is mandatory in every symbol, computed as the start character value plus each character value weighted by its position, modulo 103. Vision Scan calculates and verifies these check characters automatically alongside GTIN check digits, so a malformed code is rejected at generation time instead of at the customer’s dock.

Comments
Comments are stored in this browser only. They are not published, synced, or visible to other readers.
No comments yet on this device. Be the first.