UPC-E Generator

Zero-compressed 8-digit version of UPC-A for tiny retail packages like chewing gum.

How UPC-E is structured

UPC-E prints a number system digit (0 or 1), six data digits and a check digit in a symbol about half the width of UPC-A. The six data digits are a compressed form: they expand back to a full 12-digit UPC-A by one of a handful of rules keyed to the pattern of trailing zeros in the number. The parity pattern of the printed digits is selected by the check digit, which is how a reader knows which expansion rule to apply.

UPC-E check digit

The check digit is not calculated from the six compressed digits — it is carried over from the expanded UPC-A. Compress the full 12-digit number first, then take its existing check digit into the UPC-E string. Recomputing a check digit on the eight printed digits produces a symbol that scans to a value no database recognises.

UPC-E compared with UPC-A

Against UPC-A, UPC-E trades the full number range for width and exists purely for small packages. Against EAN-8, UPC-E keeps a link to an assigned 12-digit UPC-A, while EAN-8 is an independently issued short number. Compare the UPC-A generator page for the same breakdown of structure, check digit and use cases.

Common UPC-E problems

A check digit was computed on the compressed number

This produces a perfectly scannable symbol containing the wrong item reference. Always start from the assigned 12-digit UPC-A, suppress the zeros, and keep that number's check digit in the printed symbol.

The payload cannot be compressed

UPC-E only represents UPC-A numbers whose manufacturer and item fields end in zeros in one of a few fixed patterns. If the six-digit result will not expand back to the original, the number is not UPC-E eligible and needs a different symbology.

The reader is configured for UPC-A only

Some retail scanners ship with UPC-E disabled, so a valid symbol reads as nothing. Enable UPC-E — ideally with expansion to UPC-A enabled as well — on every scanner that will see the label.

Where UPC-E is used

Not sure this is the right symbology? The barcode format guide groups every supported 1D and 2D format by industry with its character set and limits.