Number system digit
The very first digit of a UPC-A barcode. Tells you, at a glance, what kind of product the barcode is for - ordinary retail, variable-weight produce, pharma, coupons.
What is the number system digit?
UPC-A encodes a 12-digit GTIN-12 . The first of those 12 digits is the number system digit - it categorises what application context the rest of the number lives in. A scanner can branch on this digit alone: if it's 2, treat the next 11 digits as a weighed-item code; if it's 3, treat them as a pharmaceutical NDC; otherwise process as a standard product.
When the same GTIN-12 is rewritten as a 13-digit GTIN-13, the EAN-13 equivalent has a leading 0 followed by the number system digit. So the number system digit ends up being the second digit of the GTIN-13. (See the parity selection page for how that leading zero is encoded implicitly.)
The lookup table
| Digit | Meaning | Notes |
|---|---|---|
0 | Standard retail merchandise | The default. Most groceries, household goods, packaged food. |
1 | Reserved | Not currently assigned by GS1. Future use. |
2 | Variable-weight item | Items priced by weight: meat at the deli counter, fresh produce, cheese cut to order. The 5 digits after the company prefix encode the weight or price, not a fixed product identifier. |
3 | National Drug Code (NDC) / Health-related | US pharmaceuticals carry the FDA-assigned NDC encoded as a 10-digit number, padded out to fill the UPC-A. |
4 | In-store / loyalty barcode | Retailer-internal barcodes that never leave the chain. Most loyalty-card barcodes use this. |
5 | Coupon | Pre-2005 manufacturer coupon barcodes. Superseded by GS1 DataBar Expanded for new coupons. |
6 | Standard retail merchandise | Same meaning as 0. Used when GS1 ran out of leading-0 prefixes for new company allocations in the early 2000s. |
7 | Standard retail merchandise | Same meaning as 0. Another overflow range. |
8 | Reserved | Not currently assigned by GS1. |
9 | Coupon family code extension | Used to extend coupon data when 5 alone was not enough. |
The variable-weight case (digit 2)
The most surprising number system digit is 2. When you see a UPC-A starting with 2, the barcode is not a fixed product identifier - it is a per-item label generated on the spot by the retailer's deli or produce scale. Two common encoding patterns exist:
- Price-encoded: digits 7-11 are the price in cents (or pence), with a check-digit recalculated at the scale. Used by older meat-counter scales.
- Weight-encoded: digits 7-11 are the weight in fractional units; the price is looked up from the product code in digits 2-6. Used by produce scales that print "8.49 / lb at 1.23 lb".
The same product (say, sliced ham) gets a fresh UPC-A every time the scale prints a new label - same number system digit (2), same product code in digits 2-6, but a different weight/price tail and therefore a different check digit. These barcodes never get a GS1 Company Prefix; the manufacturer is implicitly the retailer that printed the label.
Number system digit vs GS1 prefix (EAN-13)
The EAN-13 family uses a 2- or 3-digit GS1 Prefix at the front of the number instead of a single number system digit. The two ideas serve related purposes:
- The UPC-A number system digit categorises by application (retail / weight / pharma / coupon / internal).
- The EAN-13 GS1 Prefix categorises by GS1 member organisation (00-13 = GS1 US, 30-37 = GS1 France, 45-49 = GS1 Japan, etc.).
When a UPC-A is read as an EAN-13 (which happens on every EAN-13 scanner), the leading 0 + the number system digit becomes a 2-digit GS1 Prefix that always falls in the GS1 US range (00-09). The two coding systems are interleaved, not duplicated.