# UPC-E

> Source: https://docs.barcoder.ai/docs/standards/upc-e
> research date 2026-05-30 · extracted at 2026-10-03
> Publisher: Barcoder — encyclopedia of QR, barcode and payment-code standards

## Overview

**UPC-E** is the compressed, six-digit member of the [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) family. It shows
only **6 digits** and produces a barcode roughly **half the width** of a full
[UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) symbol, achieved by **suppressing zeros** in a 12-digit GTIN-12. UPC-E
is used on **small US and Canadian retail packages** where a full [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) would
not fit. The six visible digits always expand losslessly back to the original
12-digit GTIN-12.

UPC-E is standardised as **ISO/IEC 15420** (jointly with [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a), [EAN-13](https://docs.barcoder.ai/docs/standards/ean-13)
and [EAN-8](https://docs.barcoder.ai/docs/standards/ean-8)) and governed by **GS1**.

## History

UPC-E was created as part of the original Universal Product Code effort to allow
UPC barcodes to be carried on **smaller packages** than a full [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) could
fit. It is the North American counterpart to the EAN family's short-form symbol,
[EAN-8](https://docs.barcoder.ai/docs/standards/ean-8), differing in that UPC-E is a reversible *compression* of an existing
[UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) number rather than a separately allocated short code. UPC was managed
by the Uniform Code Council, which later merged into **GS1**.

## Technical specification

- **Visible digits:** 6 (plus an implicit number-system digit and an implicit
  check digit, neither of which is drawn as bars).
- **Number system:** UPC-E only works with **number system 0 or 1**; number
  system 0 is by far the most common.
- **Zero suppression** converts a 12-digit [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) (GTIN-12) to 6 digits using
  the manufacturer/product code pattern:
  - manufacturer code ending in **000, 100, or 200** → first 2 manufacturer
    digits + last 3 product digits + the 3rd manufacturer digit;
  - manufacturer code ending in **00** → first 3 manufacturer digits + last 2
    product digits + `3`;
  - manufacturer code ending in **0** → first 4 manufacturer digits + last 1
    product digit + `4`;
  - manufacturer code **not ending in zero** → first 5 manufacturer digits +
    last product digit, with a final digit of `5`-`9`.
- **Check digit:** the check digit is **not drawn directly**. It is the same
  check digit as the equivalent [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) code and is encoded **through the
  odd/even parity pattern** of the six visible digits, together with the
  number-system digit. The specific combination of parities represents the
  check-digit value; number system 0 and number system 1 use inverse parity
  sets.
- **Guard bars:** a normal start guard (101) and a **6-module end guard
  (010101)**. There is **no centre guard pattern** — all six digits are encoded
  as a single group, since the number-system and check digits ride in the parity
  rather than as drawn digits.
- **Encoding:** each visible digit uses 7 modules, giving a much narrower symbol
  than the 12-digit [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a).

## Use cases

- **Small retail packaging** — the primary use; products too small for a full
  [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a), such as cosmetics, confectionery, film/photography items, and small
  health-and-beauty goods.
- **Point of sale** — decoded by North American retail scanners, which expand
  the six digits back to a GTIN-12 before lookup.
- **GTIN carrier** — because UPC-E always maps to a GTIN-12, it references the
  same product master data as [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) and the same higher-level GS1 standards
  such as [GS1-128](https://docs.barcoder.ai/docs/standards/gs1-128).

## Implementations

UPC-E is supported by essentially every barcode scanner and POS system in North
America, alongside [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) and [EAN-13](https://docs.barcoder.ai/docs/standards/ean-13). Decoders such as ZXing and ZBar
read UPC-E and typically return the expanded 12-digit GTIN-12. Most
barcode-generation libraries accept either the 6-digit compressed form or a full
[UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) number that they compress automatically.

## Comparison

| Standard | Digits | Region | Notes |
|----------|--------|--------|-------|
| UPC-E    | 8 (6 shown) | US/Canada | Zero-suppressed UPC-A |
| [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a)  | 12     | US/Canada | Original retail barcode |
| [EAN-13](https://docs.barcoder.ai/docs/standards/ean-13) | 13     | Global | Superset of UPC-A |
| [EAN-8](https://docs.barcoder.ai/docs/standards/ean-8)  | 8      | Global | Short form for small packs |
| [GS1 DataBar](https://docs.barcoder.ai/docs/standards/gs1-databar) | varies | Global | Carries GTIN + attributes in less space |

UPC-E is the North American compact symbol; the EAN family's equivalent for
small packages is [EAN-8](https://docs.barcoder.ai/docs/standards/ean-8). The key difference is that UPC-E is a **reversible
compression** of an existing [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) (GTIN-12), whereas [EAN-8](https://docs.barcoder.ai/docs/standards/ean-8) is a
separately issued short number (GTIN-8). For richer data, GS1 systems move to
[GS1-128](https://docs.barcoder.ai/docs/standards/gs1-128) or [GS1 DataBar](https://docs.barcoder.ai/docs/standards/gs1-databar).

## Fun facts

- UPC-E has no centre guard bar — uniquely among the EAN/UPC family symbols, all
  of its drawn digits sit in one continuous group.
- Both the number-system digit and the check digit are invisible: neither is
  drawn as bars; they live entirely in the odd/even parity of the six digits.
- A UPC-E symbol is roughly half the width of the [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a) it is compressed
  from, while carrying the exact same GTIN-12 information.

## Status

UPC-E is **active** and remains the standard compact retail barcode in North
America. GS1's "Sunrise 2027" initiative encourages retailers to also accept 2D
codes at POS, but UPC-E will remain in use on small packaging for the
foreseeable future.

## Sources

- GS1 — EAN/UPC barcodes: https://www.gs1.org/standards/barcodes/ean-upc
- ISO/IEC 15420: https://www.iso.org/standard/46143.html
- GS1 US — UPCs, barcodes, prefixes: https://www.gs1us.org/upcs-barcodes-prefixes
- Wikipedia — Universal Product Code
- Wikipedia — UPC-E

## Deployments

UPC-E is deployed at retail point of sale across the United States and Canada on
small consumer packages that cannot accommodate a full [UPC-A](https://docs.barcoder.ai/docs/standards/upc-a). It is read by
the same North American scanner installed base as the rest of the EAN/UPC family
and always resolves to a GTIN-12 for product lookup.

## Deployments

_No country reports mention this standard by name._

## Regions / aggregations not mapped to a single country

- Universal
