A group of grocery industry trade associations formed the Uniform Grocery Product Code Council which with consultants Larry Russell and Tom Wilson of McKinsey & Company, defined the numerical format of the Uniform Product Code.http://www.mckinsey.com/careers/values_that_matter/our_innovative_history Technology firms including Charegon, IBM, Litton-Zellweger, Pitney Bowes-Alpex, Plessey-Anker, RCA, Scanner Inc., Singer, and Dymo Industries/Data General proposed alternative symbol representations to the council. In the end the Symbol Selection Committee chose to slightly modify, changing the font in the human readable area, the IBM proposal designed by George J. Laurer.
The first UPC marked item ever scanned at a retail checkout was at the Marsh supermarket in Troy, Ohio at 8:01 a.m. on June 26, 1974, and was a 10-pack (50 sticks) of Wrigley's Juicy Fruit chewing gum. The shopper was Clyde Dawson and cashier Sharon Buchanan made the first UPC scan. The NCR cash register rang up 67 cents.Alfred, Randy, "June 26, 1974: By Gum! There's a New Way to Buy Gum" Wired magazine 06.26.08 The entire shopping cart also had barcoded items in it, but the gum was merely the first one picked up. This item went on display at the Smithsonian Institution's National Museum of American History in Washington, D.C. Harvard Magazine, September - October 2005
In the spring of 1972 Baumeister announced a breakthrough. He proposed a label with bars that were slightly longer than the distance across all bars that needed to be read in a single pass. This label could be scanned with a simple “X” scanner only slightly more complex than the straight line laser scanner. The next day Baumeister suggested if the label was split into two halves the bar lengths could be cut nearly in half. These two proposals reduced the area from the bull’s eye by one third and then one sixth. The image to the right shows the label proposed by Baumeister. He did not specify any specific bar code as that was well understood. Except for the bar coding and ten digits the UPC label today is his proposal. Shortly after that Baumeister transferred to another area of RTP.
Laurer proceeded to define the details of the label and write a proposal. Joe Woodland was assigned as planner for the project and aided Laurer with writing his proposal. Woodland was the official inventor of a nonspecific printed bar code in the 1940s and had also been involved in the RCA bull’s eye scanner.
Laurer’s first attempt with a bar code used Delta B. The resulting label size was about six inches by three inches which was too large. Crouse suggested that Laurer use his Delta C bar code and provided a copy of his patent that had a sample alphanumeric character set and rules to generate other size alphabets. This reduced the label size to about 1.5” x 0.9”. Later Laurer asked Crouse for assistance in how the scanner could detect a label. Together they defined guard bars and a definition of how to detect the label. The guard bars also provided identification for half label discrimination and training bars for the scanner threshold circuits. Laurer had a complete label definition and proceeded to write his proposal.
Previously Crouse had an idea for a simple wand worn like a ring and bracelet. He decided to develop that wand to provide a demonstration of the label.
On December 1, 1972, IBM presented Laurer's proposal to the Super Market Committee in Rochester, Minnesota, the location where IBM would develop the scanner. During the presentation, Crouse gave a lab demonstration where he read UPC-like labels with his ring wand. In addition to reading regular labels, he read the large two-page centerfold label in the proposal booklet. He then turned to a page showing a photo of labeled items sitting on a table. The labels were small and flawed due to the resolution of the printed photo but the wand read many of them. This demonstration showed the robustness of the pure Delta C code. The proposal was accepted.
One month later, January 1, 1973 Crouse transferred back to Advanced Technology and Laurer remained with the full responsibility for the label.
Dymo Industries, makers of handheld printing devices insisted that the code be character independent, so that handheld printing devices could produce the bar code in store if the items were not bar-coded by the manufacturers. Dymo's proposal was accepted by IBM and incorporated in IBM's latest proposal.
It was decided that the two halves of the label should have a different set of numeric characters. The character set Laurer derived from the Delta C patent used seven printable increments or units where two bars and two spaces would be printed. This yielded twenty combinations of characters but there were two pairs that when read by Delta C rules yielded the same code for the pair. Since eighteen characters were not enough Laurer tried adding one unit to the character set. This yielded twenty-six Delta C characters which could provide the two sets of decimal characters but it also added fourteen percent to the width of the label and thereby the height. This would be a thirty percent increase in area or a label of 1.7”x1.03”. Laurer felt this was not acceptable. He returned to the original character set with twenty characters but four of those were two pairs with the same Delta C reading. He decided to use them all. To distinguish between the pairs he would measure one bar width in each of the pairs to distinguish them from each other. For each pair those bars would be one or two units wide. Laurer didn’t apply Baumeister’s equations to this set. He felt just one bar width measurement would not be too serious. As it turned out it would have required over fifty percent increase in width and height for an area increase of more than double. Laurer later admitted these four characters in each set were responsible for most of the scanner read errors.
D. Savir, a mathematician was given the task of proving the symbol could be printed and would meet the reliability requirements. It must be assumed he was unaware of Baumeister’s equations. He and Laurer added two more digits to the ten for error correction and detection. Then they decided to add odd/even parity to the number of units filled with bars in each side. Odd/even parity is a technique used to detect any odd number of bit errors in a bit stream. They decided to use odd on one half and even on the other. This would provide additional indication of which half ticket was being read. This meant that every bar width had to be read accurately to provide a good reading. It also meant every space would also be known. Requiring every bit width to be read precisely basically nullified the Delta C advantage except for the Delta C reference measurement. Only the strange character set and the size of the label remains as a shadow of the Delta C code. The size was still that calculated for pure Delta C.
There are some fields of engineering that require little or no mathematical analysis since those fields have absolute components such as computer logic design. Most of IBM development was in this area. Mechanical engineering and electronic circuit design commonly require worst case designs using known tolerances. Many engineers working with bar codes had little experience with such things and used somewhat intuitive methods. This was the cause of the poor performance of the Delta B code and quite likely the failure of RCA’s bull’s eye scanner.
Without Baumeister’s breakthrough there probably would not have been an IBM proposal. As simple as it was in hindsight, no one else had found it. It might have been many years before a workable proposal would have been offered. Without Crouse’s Delta C bar code the proposal would probably have been abandoned since the label with Delta B was too large. Without Laurer’s effort and persistence the proposal might never have been written. Whatever imperfections the label has the improvement in print quality has overcome them to provide accurate scans most of the time.
The following table shows the workable labels, available in the early 1970s, with their sizes.
Large |
113.10 sq. in. |
63.62 sq. in. |
34.80 sq. in. |
18.00 sq. in. |
10.35 sq. in. |
1.35 sq. in. |
This is assuming a bull’s eye with the same information and reliable readability.
The scannable area of every UPC-A barcode follows the pattern SLLLLLLMRRRRRRE, where the S (start), M (middle), and E (end) guard bars are represented exactly the same on every UPC and the L (left) and R (right) sections collectively represent the 12 that make each UPC unique. The first digit L indicates a particular number system to be used by the following digits. The last digit R is an error detecting check digit that allows some errors in scanning or manual entry to be detected. The non-numerical identifiers, the guard bars, separate the two groups of six digits and establish the timing.
The x-dimension for the UPC-A at the nominal size is 0.33 mm (0.013 in.). Nominal symbol height for UPC-A is 25.9 mm (1.02 in.). In UPC-A the dark bars forming the Start, Middle, and End guard bars are extended downwards by 5 times x-dimension, with a resulting nominal symbol of height of 27.55 mm (1.08 in.) This also applies to the bars of the first and the last symbol characters of UPC-A symbol. UPC-A can be reduced or magnified anywhere from 80% to 200%.
A quiet zone, with a width of at least 9 times the x-dimension, must be present on each side of the scannable area of the UPC-A barcode.http://www.codeproject.com/KB/graphics/upc_a_barcode.aspx UPC-E requires 9 X-dimension units on the left side and 7 on the right.UPC Symbol Specification Manual For a GTIN-12 number encoded in a UPC-A barcode symbol, the first and last digits are always placed outside the symbol to indicate the quiet zones that are necessary for barcode scanners to work properly.
A complete UPC-A includes 95 modules: the 84 modules for the digits (L and R) combined with 11 modules for the start, middle, and end (S, M, and E) patterns. The S and E patterns are three modules wide and use the pattern bar-space-bar; each bar and space is one module wide. The M pattern is five modules wide and uses the pattern space-bar-space-bar-space; each bar and space is one module wide. In addition, a UPC symbol requires a quiet zone (additional space modules) before the S pattern and another quiet zone after the E pattern.
Each digit is seven modules wide. The UPC's left-side digits (the digits to the left of the middle guard bars) have odd parity, which means the total width of the black bars is an odd number of modules. The right-hand side digits have even parity. Consequently, a UPC scanner can determine whether it is scanning a symbol from left-to-right or from right-to-left (the symbol is upside-down). After seeing a start or end pattern (they are the same bar-space-bar whichever way they are read), the scanner will first see odd parity digits if scanning left-to-right or even parity digits if scanning right-to-left. With the parity/direction information, an upside-down symbol will not confuse the scanner. When confronted with an upside-down symbol, the scanner may simply ignore it (many scanners alternate left-to-right and right-to-left scans, so they will read the symbol on a subsequent pass) or the scanner may recognize the digits and put them in the right order. There is further structure in the digit encoding. The right-hand digits are the optical complement of the left-hand digits. That means that black bars are turned into white spaces and vice versa. 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 made up of white bars and black spaces. For example, the left-hand "4" digit is space × 1, bar × 1, space × 3, bar × 2; the right-hand "4" digit is bar × 1, space × 1, bar × 3, space × 2.
UPC-A: (10 possible values per digit ^ 6 left digits) × (10 possible values per digit ^ 6 right digits) = 1,000,000 × 1,000,000 = 1,000,000,000,000.
UPC-E: 10 possible values per digit × 2 possible parities per digit = 20 permutations per digit ^ 6 digits = 64,000,000.
For example, in a UPC-A barcode "03600029145 x" where x is the unknown check digit, x can be calculated by:
This should not be confused with the numeral "X" which stands for a value of 10 in modulo 11, commonly seen in the ISBN check digit.
0 or 1 XX000-00NNN check |
0 or 1 XX100-00NNN check |
0 or 1 XX200-00NNN check |
0 or 1 XXX00-000NN check |
0 or 1 XXXX0-0000N check |
0 or 1 XXXXX-00005 check |
0 or 1 XXXXX-00006 check |
0 or 1 XXXXX-00007 check |
0 or 1 XXXXX-00008 check |
0 or 1 XXXXX-00009 check |
For example a UPC-E barcode with the number 654321 would expand to the UPC-A 065100004327 or 165100004324, depending on the parity pattern of the encoded digits, as described next.
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:
OOOEEE |
OOEOEE |
OOEEOE |
OOEEEO |
OEOOEE |
OEEOOE |
OEEEOO |
OEOEOE |
OEOEEO |
OEEOEO |
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 can detect 100% of single digit errors and 89% of transposition errors.
EAN-8 is an 8-digit (including check digit) variation of the EAN number.
UPC usage notes:
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.
|
|