Considerations, Limitations, and Processing
You want to build
an application - perhaps web based - that will match grocery store items
with Sunday Newspaper coupons.
step...(why you came to my site)
Purchase a U.P.C.
There is no solution.
There is no way to cross reference (match) a U.P.C. on a product to a U.P.C.
on a coupon. In other words, what you want to do CAN'T BE DONE.
Because the content
and structure of a "product" U.P.C. is different from the content
and structure of a "coupon" U.P.C.
Let me explain
Look at the following U.P.C.:
The first six digits
above - 012345 (in this example) - are the Company Prefix assigned by GS1 US
(formerly known as the Uniform Code Council).
The next five digits
- 67812 - are the Company's internal Stock Keeping Unit (SKU) or product
The final digit
- 7 - is a computer generated check digit.
Now look at the following Coupon U.P.C.
The first digit
- sometimes called a Number System Character (NSC) - is a 5. This tells
the Point of Sale system that the U.P.C. being scanned is a coupon.
The next five digits
- 12345 - are positions two through six of the Company Prefix.
The next three digits - 678 - are the Family Code.
The next two digits
- 90 - are the Coupon Value Code.
The final digit
- 0 - is the check digit.
So, you can see very
quickly that the U.P.C. - 012345678127 bears little resemblance to the
Coupon U.P.C. - 512345678900. Could you still match the Coupon to the Item?
Oh but wait, there's
Company Prefixes can be six, seven, eight, or even nine digits in
For example, the U.P.C. - 012345671234 - could have a Company Prefix of
01234567; but in a Coupon, digits beyond position six are dropped. So,
a Coupon for the above
might be 512345112558.
Family Codes are assigned by the Manufacturer to "group"
products within a "family" together. Some examples - same size
but different flavor frozen meals (think Lean Cuisine or Swansons, etc.),
flavored water (think Gatorade or Powerade), etc.
Yes, in a majority of cases, positions seven through nine of the U.P.C.
are the Family Code, but what if that's not always the case (it's not)?
The Coupon Value Code is a two digit number that identifies the
VALUE of the Coupon.
(For a list of Coupon Value Codes - click Here.)
Still think you could match the Coupon to the Item?
What would happen if the leading digit of the Company Prefix was NOT
Notice the second set of numbers beginning with (8101). The number immediately
following that code IS the first digit of the Company Prefix. But
to insure that your application "works" you have to capture both
sets of data.
Still with me? Let's
assume that all the planets are aligned and you want to plow ahead anyway.
Okay. In Sunday's paper you see a coupon for Campbell's Chunky Soup. The
first set of numbers on the Coupon U.P.C. is 551000121412.
Okay, first you isolate the Company Prefix - 051000 - no problem.
Now, look at the Family Code - 121.
[Coupon Value Code 41 means "Buy Three or More and Get 50 Cents Off
- in case you're interested.]
Finally, let's assume you DID buy my U.P.C. Database, and let's assume
that you were fairly adept at manipulating the numbers. So, you isolated
all of the items that started with 051000121. Guess what - you have about
twenty items to attempt to match.
Had that been Family Code been 111, you would have had more than one hundred
Get the idea?
For what it's worth, I've been approached by everyone from mathematicians
to programming firms to major universities. No one has "made it work".
Will I sell you the data - of course. Will you succeed - not likely. Caveat
For those still reading, you're probably sratching your head and saying: "so, if
I can't match a Product U.P.C. to a Coupon U.P.C., how does the Grocery Store do it?"
Or put another way - how does the Coupon "work". Good question.
First, a Coupon U.P.C. does not reference any particular Item.
As such, the Coupon Code actually "triggers" the Point of Sale System to process
- for lack of a better term - a Coupon Process Sub-Routine.
Let's look at that sub-routine, with the Coupon U.P.C. from above - 551000121412.
Assume (for this discussion) that you bought five cans of Campbell's Chunky Noodle
Soup - Chicken & Rice (so that you know, the Coupon U.P.C. in my example was for
And Assume that the Cashier has just "rung up" everything in your Shopping Cart,
and now he or she asks if you have any Coupons.
You say "yes", and hand her my "example" Coupon (with the number above).
When the Coupon U.P.C. is "scanned" the first number of the U.P.C. - "5" is "read",
which tells the POS System that a Coupon is about to be processed.
[All Coupon U.P.C.'s begin with a 5, which keeps Coupon programming "uniform"
for all POS Systems.]
Next, the POS System isolates any and all Items that have 51000 in positions two
through six of the Product U.P.C.
By way of review, the GS1 Prefix for Campbell's Soup (the first six digits) is 051000.
A Coupon U.P.C. replaces the leading digit (in this case a ZERO) with a "5", so only
positions two through six of the Prefix "appear" in the Coupon U.P.C.
Let's assume that, in addition to the five cans of Chunky Noodle Soup you also bought
other Soups and Mixes from Campbell's.
For our purposes, let's say that you have ten Items from Campbell's.
The Coupon Process Sub Routine now "holds" all ten Campbell's Items.
- Quick Break - the Coupon Process started by identifying the "5", and has moved
on to the partial Prefix "match".
Next, the POS System isolates any and all Items that have "121" in positions seven
through nine of the Product U.P.C.
From above, positions seven through nine of the Product U.P.C. are the Product Family
Code - assigned by the Manufacturer.
The purpose of the Family Code is to group "like" products together, for the purpose
of creating "promotions", like Coupons.
In our example, "121" represents all Chunky Noodle Soups.
So, the Point of Sale System has now isolated five Items (the five cans of Chunky Noodle
Soup), based on a string of digits - 51000121 - in positions two through nine of the
Finally, the Point of Sale System reads the Digits in positions ten and eleven of the
Coupon U.P.C. - in this case, "41".
Unlike the Prefix and Family Code - which are the same in both the Coupon and Product U.P.C.
(with the exception of the leading "5" in the Coupon U.P.C.) - positions ten and eleven of
the Coupon U.P.C. are different - by design.
These digits (as I said "41") are used to "look-up" the actual Coupon Value (from a Coupon
Value Code Table).
Coupon Value Code "41" means "Buy Three or More and Get 50 Cents Off".
So, 50 Cents is removed from your Total.
Though lengthy, hopefully I've conveyed this - Coupon U.P.C.'s don't require a "link" to any
specific Product, just those that match a string of numbers in positions two through nine of
a Product U.P.C.
All the Point of Sale System has to do is find "a match", and if there is a "match",
just apply the Coupon Value Code against the Purchase.
For additional reference material, GS1 US issued a Power Point presentation two years ago. I've converted it into PDF.