Check Digit Calculator & Bulk GTIN Validator

Every retail barcode number — EAN-13, UPC-A, EAN-8, ITF-14 — ends in a check digit computed from the digits before it. This page computes it, verifies it, and shows the mod-10 arithmetic step by step. And where GS1's own calculator takes one number at a time, the bulk validator below takes a whole column pasted from Excel: up to 500 numbers per pass, each verified or completed, with a corrected column you can copy straight back.

Single number — compute or verify

Runs locally in your browser — nothing you type is transmitted or stored.

8, 12, 13, or 14 digits verify a complete number; 7 or 11 digits compute and append the check digit. Spaces and hyphens are ignored.

The verdict and the worked mod-10 math appear here.

Bulk validator — paste a column

Paste up to 500 numbers, one per line — straight from an Excel or Sheets column. Validated locally; your list never leaves the browser.

How should each line be read?

Blank lines are skipped; spaces and hyphens inside numbers are ignored.

The counts summary appears here; each pasted line gets its own verdict below.

How the mod-10 check digit works

Take the data digits — everything except the final digit — and weight them alternately by 1 and 3, anchored at the right: the digit immediately before the check digit always gets weight 3. Multiply, sum the products, and the check digit is whatever brings that sum up to the next multiple of ten. That single algorithm, from the GS1 General Specifications, protects the whole GTIN family regardless of length.

Worked example — data digits 400638133393: the weighted products sum to 89; the next multiple of ten is 90; so the check digit is 90− 89 = 1.

Complete EAN-13: 4006381333931

These figures are computed at build time by the same tested engine the calculator above runs in your browser, so the prose cannot drift from the code.

The check digit exists to catch human error: it detects every single-digit typo and most swaps of adjacent digits. That is also why this page never quietly repairs a failing number. A mismatch usually means one of the other digits is wrong, and overwriting the last digit would turn a detectable mistake into a perfectly plausible wrong number — the corrected value is offered in its own column, clearly labeled, so the choice stays yours.

One algorithm, every packaging level

A product's 13-digit barcode number rarely travels alone. The same item is a GTIN-13 on the shelf unit (EAN-13), a GTIN-12 in North America (UPC-A), and becomes a GTIN-14 on the shipping case (ITF-14): an indicator digit 1–8 is prefixed to the data digits and the check digit is recomputed with the identical mod-10 arithmetic — only right-aligned over one more digit. Our example4006381333931 at case level with indicator 1 becomes 14006381333938: the products now sum to 92, so the final digit changes from 1 to 8. That is why a carton code never shares its parent's check digit by accident, and why the bulk validator handles all four lengths — 8, 12, 13, and 14 digits — with one algorithm.

A correct check digit is not a licensed number

Passing the math means the digits are structurally valid — internally consistent, nothing more. Any invented 13-digit string whose last digit happens to satisfy the sum will pass this and every other check-digit calculator, including GS1's. Whether a number is a licensed, registered GTIN that stores and marketplaces will accept is decided by GS1's registry, not by arithmetic. If you are deciding whether you need officially licensed numbers at all, start withdo I need a GS1 barcode? — the honest answer depends on where you sell.

How the bulk validator reads your column

Each non-blank line is cleaned of spaces and hyphens, then read by length. In the default mode, 8-, 12-, 13-, and 14-digit lines are treated as complete numbers and verified; 7- and 11-digit lines have no complete reading, so their check digit is computed and appended, labeled "completed" rather than passed off as validation. Twelve- and thirteen-digit lines are genuinely ambiguous — a complete GTIN-12 and an EAN-13 awaiting its check digit are both 12 digits — so the validator states its reading per row and offers the explicitdata only mode for columns that have no check digits yet. Lists longer than 500 lines are cut off with a note saying exactly that. The corrected column preserves row order, leaving unusable rows blank, so it pastes back into a spreadsheet beside the original.

Check digit FAQ

I pasted 12-digit numbers expecting a 13th digit — why do some rows say "wrong check digit"?

A 12-digit line is ambiguous: it could be a complete UPC-A (11 data digits plus a check digit) or the first 12 digits of an EAN-13 still waiting for its check digit. By default the validator reads it as a complete number, because validating is its job. If your column has no check digits yet, switch the bulk tool to "Data only — append the check digit" and every line gets its digit computed and appended instead.

If the check digit is correct, is the barcode number valid?

It is structurally valid: the digits are internally consistent under the GS1 mod-10 algorithm. That is all a check digit can tell you. Whether the number is a licensed, registered GTIN that retailers will accept is a matter of GS1 records, not arithmetic — any 13-digit string with a matching final digit passes the math.

How many numbers can I validate at once?

Up to 500 per pass, entirely in your browser. Longer lists are cut off honestly — the summary tells you only the first 500 lines were processed rather than silently dropping the rest. For bigger files, paste in batches.

Is my product list uploaded anywhere?

No. Parsing, validation, and the check-digit math run as JavaScript on your device. Nothing you type or paste is transmitted, logged, or stored; closing the page discards it.

Scope, honestly: this page verifies arithmetic — digits and their mod-10 consistency. It cannot tell you whether a number is registered to a company, and it does not check ISBN mod-11 checks (the ISBN barcode tool does). Everything runs locally in your browser; see the methodology page for how the verification layer is tested.