U.P.C. Databases
& SKU Matching

Coupon Considerations, Limitations, and Processing

The challenge...

You want to build an application - perhaps web based - that will match grocery store items with Sunday Newspaper coupons.

The interim step...(why you came to my site)

Purchase a U.P.C. Database.

The solution...

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 number.

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 more:

Company Prefixes can be six, seven, eight, or even nine digits in length.

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 a zero?

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 items.

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 Emptor.

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 just that).

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 Product U.P.C.

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.

©2017 Gregg London