UPC-E ⇄ UPC-A Converter

That short barcode on a lip balm or a pack of gum is a UPC-A with its zeros squeezed out. Paste either form to get the other — and to see exactly which zeros went missing.

🔒 Your data never leaves your browser.

How zero suppression works

UPC-E is not a different numbering system — it is a UPC-A with up to five zeros removed so the barcode fits on a package too small for the full symbol. Which zeros can be removed depends on where they sit, and the last data digit records which pattern was used, so the scanner can put them back.

Last data digitWhat it means
0, 1 or 2Manufacturer code ends in 000, 100 or 200, and the product code is under 1000. The last data digit carries the manufacturer's third digit.
3Manufacturer code ends in 00 (with a third digit of 3–9), and the product code is under 100.
4Manufacturer code ends in 0 (fourth digit non-zero), and the product code is under 10.
5–9Manufacturer code has no trailing zeros, and the product code is a single digit from 5 to 9 — which is also the last data digit.

This is why most UPC-A codes have no UPC-E form: the zeros have to be in exactly the right places. If your code cannot be compressed, that is the standard talking, not a limit of this tool.

The check digit trap

A UPC-E's check digit is not calculated from its own eight digits. It is the check digit of the expanded UPC-A. Implementations that compute it directly from the short form produce codes that scan as invalid — a classic bug in hand-rolled barcode code.

UPC-E vs EAN-8: same length, unrelated

Both are 8 digits, and that is where the similarity ends. A UPC-E expands to a 12-digit UPC-A. An EAN-8 / GTIN-8 is an independent GS1 number range issued directly for small packages — it expands to nothing and has no longer form. A UPC-E always starts with 0 or 1; an 8-digit code starting with anything else cannot be one. This tool shows you both readings rather than guessing.

Every check this tool runs (11 rules)

INPUT-001 Empty input

Nothing remains after trimming whitespace and formatting characters.

Fix: Enter a GTIN: 8, 12, 13 or 14 digits.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-002 Scientific notation corruption (Excel)

Input looks like "8.71E+12". Excel converts long numbers to scientific notation and permanently discards the middle digits — the original GTIN cannot be recovered from this value.

Fix: Go back to the source file. In Excel, format the column as Text (or prefix values with an apostrophe) before the numbers are converted, then re-export.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-003 Formatting characters removed

Spaces, dashes, thousands separators or invisible characters (zero-width spaces, BOM, non-breaking spaces) were stripped before validation. Common when copying from spreadsheets, PDFs or web pages.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-004 Full-width digits converted

Full-width digits (123, common in CJK input methods and documents) were converted to standard ASCII digits.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-005 Non-numeric characters

After cleaning, the input still contains characters that are not digits. A GTIN consists of digits only.

Fix: Remove letters and symbols. If your data has an internal SKU mixed in, extract the numeric barcode column.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

INPUT-007 Invalid length

A GTIN must be exactly 8 (GTIN-8/EAN-8), 12 (GTIN-12/UPC-A), 13 (GTIN-13/EAN-13) or 14 (GTIN-14/case code) digits.

Fix: Check for truncation or concatenated values. 7-digit values may be a GTIN-8 that lost a leading zero.

Source: GS1 — Global Trade Item Number (GTIN)

INPUT-008 Trailing ".0" removed (spreadsheet number conversion)

Input like "4006381333931.0" indicates the value passed through a tool that treated it as a floating-point number (Excel, pandas). The ".0" was stripped and validation continued — but check the rest of the column for worse corruption (scientific notation, lost zeros).

Fix: Format the column as Text at the source to stop numeric conversion.

Source: Yaktool data-hygiene rule — derived from real-world spreadsheet and copy-paste corruption patterns, not from a GS1 specification. Every case is covered by a regression test in our test suite.

CHECK-001 Check digit mismatch

The last digit must equal the GS1 Mod-10 checksum (weights 3,1,3,1… from the right) of the preceding digits. A mismatch means a typo, an OCR error, or a fabricated code.

Fix: Compare against the number printed under the barcode on the physical product. Do not simply replace the check digit unless you are sure the other digits are correct.

Source: GS1 — How to calculate a check digit manually

FORMAT-001 GTIN-12 ⇄ GTIN-13 equivalence

A UPC-A (GTIN-12) with a leading zero prepended is the same product code as its GTIN-13 form — the check digit does not change. Marketplaces may display either form.

Source: GS1 — Global Trade Item Number (GTIN)

FORMAT-004 GTIN-8 is its own number range

GTIN-8 (EAN-8) codes are allocated directly by GS1 for small packages. A GTIN-8 is not a truncated or zero-padded EAN-13, and its first digits are a GS1-8 prefix, not a company prefix.

Source: GS1 — Global Trade Item Number (GTIN)

CONV-003 No UPC-A form for this GTIN-13

Only GTIN-13 codes that start with 0 (a US/Canada company prefix) have a 12-digit UPC-A form. A code issued under any other prefix simply has no valid UPC representation.

Fix: Keep the 13-digit form — US marketplaces accept GTIN-13 values in their GTIN/UPC fields.

Source: GS1 — Global Trade Item Number (GTIN)

FORMAT-001 is the one worth expanding: a GTIN-8 is an independent number range, not a zero-padded UPC-E, and conflating them is the most common error in this area. Range and placeholder checks belong to the full validator.