UPC Symbology



The "UPC-A bar code" is by far the most common and well-known symbology, at least in the United States. An UPC-A bar code is the bar code you will find on virtually every consumer good on the shelves of your local supermarket, as well as books, magazines, and newspapers. It is commonly called simply a "UPC bar code" or "UPC Symbol." This isn't entirely accurate since there are a number of other UPC formats (UPC-E, UPC 2-Digit Supplement, UPC 5-Digit Supplement).

UPC-A encodes 11 digits of numeric (0 through 9) message data along with a trailing check digit, for a total of 12 digits of bar code data. An example of a typical UPC-A bar code is:

This bar code is actually from a compact disc I purchased in the 1980's (very good CD, by the way! If you print the above bar code and take it to your local CD store, you'll be able to know what CD it is. Or you can just write down the number that appears below the bar code and compare it with the number that appears below the bar code of every CD in the store).

The human-readable digits are printed for the benefit of us lowly humans only. Obviously, the scanner doesn't pay any attention to them whatsoever and a bar code that is printed without these numbers will work just as well as one that includes them.


An UPC-A bar code is divided into four areas: 1) The number system, 2) The manufacturer code, 3) the product code, and 4) the check digit. Normally the number system digit is printed just to the left of the bar code, the check digit just to the right of the bar code, and the manufacturer and product codes are printed just below the bar code, as observed above.

Number System: The number system is a single digit which identifies the "type" of product, if you will, that the following symbol represents. The following table indicates what each number system identifies.

0 Regular UPC codes
1 Reserved
2 Weight items marked at the store
3 National Drug/Health-related code
4 No format restrictions, in-store use on non-food items
5 Coupons
6 Reserved
7 Regular UPC codes
8 Reserved
9 Reserved

Manufacturer Code: The manufacturer code is a unique code assigned by the UCC Council to each manufacturer or company which distributes goods that will include a UPC-A bar code. All products produced by a given company will use the same manufacturer code. Again, the UCC Council is in charge of assigning manufacturer codes. A company may not choose one randomly or without consulting with the UCC Council since this would quickly result in multiple manufacturers using the same code.

NOTE: Since the manufacturer code is a 5-digit number, there are 99,999 possible manufacturer codes available.

NOTE: The UCC is beginning to use what is called "variable-length manufacturer codes." Assigning 5-digit manufacturer codes means that each manufacturer can have up to 99,999 product codes--and many manufacturers don't have that many products. Now, the UCC will be able to assign manufacturer codes that are longer than 5 digits long. This means they can assign more manufacturer codes and each manufacturer will have a lower number of available product codes.

Product Code: The product code is a unique code assigned by the manufacturer. Unlike the manufacturer code, which must be assigned by the UCC, the manufacturer is free to assign product codes to each of their products without consulting any other organization. Since the UCC will already have guaranteed that the manufacturer code is unique, the manufacturer need only make sure that they do not repeat their own product codes.

NOTE: Since the product code is a 5-digit number, there are 99,999 possible product codes for each manufacturer. It is unlikely that any single manufacturer would have more than 99,999 products being sold at once so this is normally not a restrictive limit.
NOTE: If a company did in fact have more than 99,999 products, presumably they would request a second manufacturer code from the UCC. We are not aware of whether this has actually ever happened or not. If you have information regarding whether this has ever happened, please let us know!

Check Digit: The check digit is an additional digit used to verify that a bar code has been scanned correctly. Since a scan can produce incorrect data due to inconsistent scanning speed, print imperfections, or a host of other problems, it is useful to verify that the rest of the data in the bar code has been correctly interpreted. The check digit is calculated based on the rest of the digits of the bar code. Normally, if the check digit is the same as the value of the check digit based on the data that has been scanned, there is a high level of confidence that the bar code was scanned correctly. The method of calculating the check digit will be discussed later in this page.


UPC-E is a variation of UPC-A which allows for a more compact barcode by eliminating "extra" zeros. Since the resulting UPC-E barcode is about half the size as an UPC-A barcode, UPC-E is generally used on products with very small packaging where a full UPC-A barcode couldn't reasonably fit.

UPC-E uses a rather convoluted, but quite effective, method of compressing out unnecessary zeros. Keep in mind that in UPC-A there are five characters for the manufacturer code and five characters for the product code. The trick is to reduce all 10 characters into just 6 characters. How?


UPC-E uses the "left-hand odd" and "left-hand even" encoding character sets from the EAN-13 encoding standard.

UPC-E doesn't have a check digit encoded explicity, rather the check digit is encoded in the parity of the other six characters. The check digit that is encoded is the check digit from the original UPC-A barcode.

Additionally, UPC-E may only be used if the number system is 0 or 1. The characters encoded are encoded with odd and even parity from the left-hand columns of the EAN-13 character formats in the table previously provided. The parity used for each character depends on the number system (0 or 1) and the check digit from the original UPC-A barcode.




An UPC-E barcode has the following physical structure:

  • Left-hand guard bars, or start sentinel, encoded as 101.
  • Six data characters, encoded from the parity table above.
  • Right-hand guard bars, encoded as 010101 (a center-guard bar pattern with a trailing bar).

NOTE: The structure of a UPC-E barcode is identical to the left-half of a standard UPC-A barcode. The only difference is that the center-guard pattern is terminated immediately by a trailing bar and trailing quiet zone.


For this example we will convert the UPC-A symbol "042100005264" to a UPC-E code. First, we break the UPC-A symbol into its components: Number system 0, manufacturer code 42100, product code 00526, check digit 4.

First, we make note of the fact that the number system is zero (0). We will thus use the first column of the parity encoding table. We also observe that the original UPC-A check digit was 4. Thus, consulting the table above, we see that our UPC-E barcode will be encoded with the parity "EOEEOO".

Next, we must determine how we're going to code this. We see that the manufacturer code ends in "100", so we can use the first encoding method: The first two characters of the manufacturer code, the last three characters of the product code, followed by the third character of the manufacturer code. That would be "425261". Those are the digits that we need to code using the parity pattern "EOEEOO".

  1. LEFT GUARD BARS (always the same): 101.
  2. 1st UPC-E DIGIT [4]. Encoding with left-hand even parity, 0011101.
  3. 2nd UPC-E DIGIT [2]. Encoded with left-hand odd parity, 0010011.
  4. 3rd UPC-E DIGIT [5]. Encoded with left-hand even parity, 0111001.
  5. 4th UPC-E DIGIT [2]. Encoded with left-hand even parity, 0011011.
  6. 5th UPC-E DIGIT [6]. Encoded with left-hand odd parity, 0101111.
  7. 6th UPC-E DIGIT [1]. Encoded with left-hand odd parity, 0011001.
  8. CENTAR GUARD BARS (always the same): 01010.
  9. RIGHT GUARD BAR (always the same): 1.

Remember, a "1" represents a bar and a "0" represents a space. Thus if we convert this string of numbers to their graphical representation we end up with the following barcode:

To the left of the barcode, the number "0" represents the number system code. The number "4" to the right of the barcode indicates the original UPC-A checksum digit. These two digits are printed as human-readable numbers, but are actually encoded in the parity of the other 6 numbers.

In order to see more clearly the construction of the barcode, the following graphic shows the exact same barcode but each character, or section, of the barcode is indicated by alternating colors. Above the barcode, in each colored section, is a number from 1 to 15, which corresponds to each of the "steps," or sections, described above. You may easily compare the 1-0 sequence of each step to the graphical representation below: