UPC-A vs UPC-E: Format, Length & Check Digit
UPC-A and UPC-E look like two barcodes but they are two views of the same number. Understanding the compression rules explains everything, including the check digit.
What each format is
UPC-A is the standard 12-digit retail barcode used across North America. It is a full GTIN, equivalent to an EAN-13 with a leading zero. UPC-E is not a different numbering scheme. It is a compressed, 8-digit rendering of a UPC-A whose structure allows several zeros to be removed. Every valid UPC-E corresponds to exactly one UPC-A.
The direction of that relationship matters. Every UPC-E maps to exactly one UPC-A, but the reverse is not true: only UPC-A numbers whose internal zeros fall in a compressible pattern have a UPC-E form at all. That is why you should treat UPC-A as the source of truth and UPC-E as a rendering. A scanner reading a UPC-E at the register silently expands it back to the 12-digit UPC-A before the point-of-sale system ever looks the product up, so the number your systems act on is always the UPC-A.
Length and structure
The headline difference is size:
- UPC-A is 12 digits: a number system digit, then the manufacturer and product data, then a check digit.
- UPC-E is 8 digits: a leading number system digit (0 or 1), six compressed data digits, and a check digit.
UPC-E exists to fit a scannable barcode onto small packaging where a full UPC-A would not physically fit. Because it is smaller, only UPC-A numbers with a specific pattern of internal zeros can be compressed into it.
| Property | UPC-A | UPC-E |
|---|---|---|
| Digits | 12 | 8 |
| Is a full GTIN | Yes | No |
| Compresses internal zeros | No | Yes |
| Check digit source | Its own 11 data digits | The expanded UPC-A |
| Where it appears | Standard retail units | Small packaging and tiny labels |
| Safe to store as the canonical value | Yes | No |
How UPC-E compresses a UPC-A
Compression works by removing a run of zeros, and the position of a key digit decides where those zeros were. For a UPC-A written as number-system, then manufacturer and product digits, the expansion of a UPC-E of the form 0 X1 X2 X3 X4 X5 X6 C follows the last data digit X6:
- If X6 is 0, 1, or 2, the UPC-A is 0 X1 X2 X6 0 0 0 0 X3 X4 X5 C.
- If X6 is 3, the UPC-A is 0 X1 X2 X3 0 0 0 0 0 X4 X5 C.
- If X6 is 4, the UPC-A is 0 X1 X2 X3 X4 0 0 0 0 0 X5 C.
- If X6 is 5, 6, 7, 8, or 9, the UPC-A is 0 X1 X2 X3 X4 X5 0 0 0 0 0 X6 C.
Worked example: the UPC-E 04252614 has data digits 425261 and X6 = 1, so it falls in the first rule and expands to the UPC-A 042100005264. Compressing that UPC-A back removes exactly the run of zeros the rule inserted.
The check digit relationship
This is the part that trips people up. The check digit of a UPC-E is the check digit of its expanded UPC-A. It is not computed from the 8 UPC-E digits. To verify a UPC-E, expand it to the full 12-digit UPC-A first, then run the standard GS1 modulo-10 formula over that.
Check the example. Expanding 04252614 gives 042100005264, whose 11 data digits are 0 4 2 1 0 0 0 0 5 2 6. Weighting from the right, the rightmost data digit 6 gets weight 3: 6x3=18, 2x1=2, 5x3=15, then five zeros contribute 0, 1x1=1, 2x3=6, 4x1=4, 0x3=0. The sum is 18+2+15+1+6+4 = 46. 46 modulo 10 is 6, and (10 minus 6) modulo 10 is 4, which matches the printed final digit. If you try that math on the raw 8 UPC-E digits instead, it fails, which is a frequent cause of a check digit mismatch.
Never run the modulo-10 check over the 8 UPC-E digits directly. The printed final digit is the check digit of the 12-digit expansion, so validating the compressed form always fails. Expand to UPC-A first with the GTIN converter, then verify with the barcode validation tool.
When to use which
You rarely choose UPC-E yourself. Use UPC-A as your canonical stored value: it is the full GTIN, it interchanges cleanly with EAN-13, and every system understands it. Treat UPC-E as a display and printing option for tiny labels, always expanding to UPC-A before you store, validate, or look up. To normalize between formats, use the GTIN converter, and confirm any result with the barcode validation tool. For the wider picture, read what a GTIN is and how to validate a barcode.
Frequently asked questions
Is UPC-E a different product code from UPC-A?
No. A UPC-E is a compressed view of one specific UPC-A. They identify the same product and share the same check digit.
Why does my UPC-E fail the modulo-10 check?
Because the UPC-E check digit is derived from the expanded 12-digit UPC-A, not from the 8 compressed digits. Expand it first, then validate.
Can every UPC-A be shown as UPC-E?
No. Only UPC-A numbers with the right pattern of internal zeros can be compressed. If the zeros are not in a compressible position, the number stays UPC-A only.
Try the tools
Related reading
How to Validate a Barcode: UPC, EAN & GTIN
A practical guide to checking that a UPC, EAN, or GTIN is well formed before you trust it.
Why Your Barcode Check Digit Does Not Match: 7 Causes
The seven reasons a UPC or EAN check digit fails validation, and how to fix each one.
How to Calculate a UPC/EAN Check Digit by Hand
Compute the modulo-10 check digit for any UPC-A or EAN-13 with a pen, paper, and one small rule.