The UPC encodes 12 decimal digits as S**LLLLLL**M**RRRRRR**E, where S (start) and E (end) are the bit pattern 101, M (middle) is the bit pattern 01010 (called guard bars), and each L (left) and R (right) are digits, each one represented by a seven-bit code. This is a total of 95 bits. The bit pattern for each numeral is designed to be as little like the others as possible, and to have no more than four consecutive 1s or 0s in order. Both are for reliability in scanning.

Since S, M, and E all include two bars, and each of the 12 digits of the UPC-A barcode consists of two bars and two spaces, all UPC-A barcodes consist of exactly (3 × 2) + (12 × 2) = 30 bars.

The UPC has only numerals, with no letters or other characters. The first digit L is the prefix. The last digit R is an error correcting check digit, allowing some errors in scanning or manual entry to be detected. UPC data structures are a component of GTINs (Global Trade Item Numbers). All of these data structures follow the global GS1 standards.

The bar-and-space patterns for each digit 0–9 are as follows:

Digit | L Pattern | R Pattern |
---|---|---|

0 | 0001101 | 1110010 |

1 | 0011001 | 1100110 |

2 | 0010011 | 1101100 |

3 | 0111101 | 1000010 |

4 | 0100011 | 1011100 |

5 | 0110001 | 1001110 |

6 | 0101111 | 1010000 |

7 | 0111011 | 1000100 |

8 | 0110111 | 1001000 |

9 | 0001011 | 1110100 |

A binary 1 is always indicated by a black bar while a 0 is indicated by a white space. Numbers on the right side of the middle guard bars are optically the inverse of the numbers to the left. In other words, while a number on the left side of the UPC will be made up of black bars and white spaces, the same number on the right side would be indicated by the inverse (what was black on the left is now white and what was white is now black).

In the illustraction above, the “4” digit (shown in detail), is 1011100 (bar x 1, space x 1, bar x 3, space x 2). If the “4” digit were on the left hand side it would be 0100011 (space x 1, bar x 1, space x 3, bar x 2). This inversion enables the barcode to be scanned from left-to-right or right-to-left. Since the same number is represented differently based on where it lies in the code the scanning software knows if it read the code the correct way or upside down.

## Prefixes

- 0, 1, 6, 7, 8, or 9: For most products.
- 2: Reserved for local use (store/warehouse), for items sold by variable weight. Variable-weight items, such as meats and fresh fruits and vegetables, are assigned a UPC by the store, if they are packaged there. In this case, the LLLLL is the item number, and the RRRRR is either the weight or the price, with the first R determining which.
- 3: Drugs by National Drug Code number. Pharmaceuticals in the U.S. have the remainder of the UPC as their National Drug Code (NDC) number; though usually only over-the-counter drugs are scanned at point-of-sale, NDC-based UPCs are used on prescription drug packages as well for inventory purposes.
- 4: Reserved for local use (store/warehouse), often for loyalty cards or store coupons.
- 5: Coupons The Manufacturer code is the LLLLL, the first 3 RRR are a family code (set by manufacturer), and the next 2 RR are a coupon code. This 2-digit code determines the amount of the discount, according to a table set by the GS1 US, with the final R being the check digit.

By prefixing these with a 0, they become EAN-13 rather than UPC-A. This does not change the check digit. All point-of-sale systems can now understand both equally.

## Interpreting barcodes

- EAN-13 barcodes also indicate the country in which the company that sells the product is based (which may or may not be the same as the country in which the good is manufactured). The leading digits of the code determine this, according to this code list. The EAN-13 encoding rules encode the leading 13th digit by modifying the encoding of the left-hand half of the barcode: the original rules for UPC are treated as a ‘0’ if read as EAN-13. A UPC barcode XXXXXXXXXXXX therefore
*is*the EAN-13 barcode 0XXXXXXXXXXXX.

## Check digit calculation

In the UPC-A system, the check digit is calculated as follows:

- Add the digits in the odd-numbered positions (first, third, fifth, etc.) together and multiply by three.
- Add the digits in the even-numbered positions (second, fourth, sixth, etc.) to the result.
- Find the result modulo 10 (i.e. the remainder when divided by 10.. 10 goes into 58 5 times with 8 leftover).
- If the result is not zero, subtract the result from ten.

For example, a UPC-A barcode (in this case, a UPC for a box of tissues) “03600029145X” where *X* is the check digit, *X* can be calculated by

- adding the odd-numbered digits (0 + 6 + 0 + 2 + 1 + 5 = 14),
- multiplying by three (14 × 3 = 42),
- adding the even-numbered digits (42 + (3 + 0 + 0 + 9 + 4) = 58),
- calculating modulo ten (58 mod 10 = 8),
- subtracting from ten (10 − 8 = 2).

The check digit is thus 2.

This should not be confused with the real numeral “X” which stands for a value of 10 in modulo 11.

## Zero-compressed UPC-E

To allow the use of UPC barcodes on smaller packages where a full 12-digit barcode may not fit, a ‘zero-compressed’ version of UPC was developed called UPC-E. This symbology differs from UPC-A in that it only uses a 6-digit code, does not use middle guard bars, and the end bit pattern (E) becomes 010101. The way in which a 6-digit UPC-E relates to a 12-digit UPC-A is determined by the last (right-hand most) digit. With the manufacturer code represented by X’s, and product code by N’s then:

Last digit | UPC-E equivalent is | UPC-A equivalent is |
---|---|---|

0 | XXNNN0 | 0XX000-00NNN + check |

1 | XXNNN1 | 0XX100-00NNN + check |

2 | XXNNN2 | 0XX200-00NNN + check |

3 | XXXNN3 | 0XXX00-000NN + check |

4 | XXXXN4 | 0XXXX0-0000N + check |

5 | XXXXX5 | 0XXXXX-00005 + check |

6 | XXXXX6 | 0XXXXX-00006 + check |

7 | XXXXX7 | 0XXXXX-00007 + check |

8 | XXXXX8 | 0XXXXX-00008 + check |

9 | XXXXX9 | 0XXXXX-00009 + check |

For example a UPC-E barcode with the number 654321 would expand to the UPC-A 065100004327. You can convert UPC-E back to UPC-A using this web utility.

UPC-E check digits are calculated using this expanded string in the same way as used by UPC-A. The resulting check digit is not added to the barcode, however, but is encoded by manipulating the parity of the six digits which are present in the UPC-E – as shown in the following tables:

Check digit | Parity pattern |
---|---|

0 | EEEOOO |

1 | EEOEOO |

2 | EEOOEO |

3 | EEOOOE |

4 | EOEEOO |

5 | EOOEEO |

6 | EOOOEE |

7 | EOEOEO |

8 | EOEOOE |

9 | EOOEOE |

Digit to be encoded | Odd parity pattern | Even parity pattern |
---|---|---|

0 | 3-2-1-1 | 1-1-2-3 |

1 | 2-2-2-1 | 1-2-2-2 |

2 | 2-1-2-2 | 2-2-1-2 |

3 | 1-4-1-1 | 1-1-4-1 |

4 | 1-1-3-2 | 2-3-1-1 |

5 | 1-2-3-1 | 1-3-2-1 |

6 | 1-1-1-4 | 4-1-1-1 |

7 | 1-3-1-2 | 2-1-3-1 |

8 | 1-2-1-3 | 3-1-2-1 |

9 | 3-1-1-2 | 2-1-1-3 |

Our example code 654321, therefore, would become 1-1-1 4-1-1-1 1-2-3-1 2-3-1-1 1-4-1-1 2-2-1-2 2-2-2-1 1-1-1-1-1-1. The resulting barcode would look roughly like this:

Note: The UPC code can detect 100% of single digit errors and 89% of transposition errors.

## Other variations

UPC in its most common usage technically refers to UPC-A. Other variants of the UPC exist.

- UPC-B is a 12-digit version of UPC with no check digit, developed for the National Drug Code and National Health Related Items Code.
- UPC-C is a 12-digit code with a check digit.
- UPC-D is a variable length code (12 digits or more) with the 12th digit being the check digit. These versions are not in common use.
- UPC-5 is a 5-digit supplement to the UPC code used to indicate suggested retail price for books.

As the UPC becomes technologically obsolete, it is expected that UPC-B and UPC-C will disappear from common use by the 2010s. The UPC-D standard may be modified into EAN 2.0 or be phased out entirely.

## Other variations

UPC in its most common usage technically refers to UPC-A. Other variants of the UPC exist.

- UPC-B is a 12-digit version of UPC with no check digit, developed for the National Drug Code and National Health Related Items Code.
- UPC-C is a 12-digit code with a check digit.
- UPC-D is a variable length code (12 digits or more) with the 12th digit being the check digit. These versions are not in common use.
- UPC-5 is a 5-digit supplement to the UPC code used to indicate suggested retail price for books.

As the UPC becomes technologically obsolete, it is expected that UPC-B and UPC-C will disappear from common use by the 2010s. The UPC-D standard may be modified into EAN 2.0 or be phased out entirely.

## Printing considerations

**Dimensions**

UPC-A Bar code symbols can be printed at various densities to accommodate variety of printing and scanning processes. The significant dimensional parameter is called X-dimension, the ideal width of single module element. The X-dimension has to be constant in UPC-A symbol. The width of each bar (dark bar) and space (light bar) is determined by multiplying the X-dimension by the module width of each dark bar or light bar (1,2,3, or 4).

The X-dimension for the UPC-A at the nominal size is 0.33 mm (0.013 in.). UPC-A can be reduced or magnified in the range of 80% to 200%.

Nominal symbol height for UPC-A is 25.9 mm (1.0 in.). In UPC-A the dark bars forming the left, centre, and right Guard Bar Patterns are extended downwards by 5 times X-dimension. This also applies to the bars of the first and the last symbol characters of UPC-A symbol. See illustration.

**Quiet zone (light margin)**

The minimum Quiet Zone width required by the UPC-A bar code symbol is 9 x X-dimension on both the left and right sides. UPC-E requires 9 X-dimension units on the left side and 7 on the right. (Source; UPC Symbol Specification Manual).

**Barcode text**

Exactly 12 digits must be printed below the UPC-A barcode.