通用产品代码
历史
UPC是在IBM公司工程师諾曼·伍德蘭的环形码基础上诞生的[1]。1966年,美国国家食物连锁协会(National Association of Food Chains,NAFC)要求研制加快货物验收速度的设备,国家收款机(National Cash Register,IBM公司的前身)在1967年开发出了用来替代伍德兰德牛眼码的新式同心圆环码。
1970年夏天,应国家食物连锁协会要求,Logicon公司开发出了食品工业统一码(Universal Grocery Products Identification Code,UGPIC),依據IBM乔治·劳雷尔設計方案[2][3]。很快,美国超市Ad Hoc组织在Logicon公司建议下制造了UPC。美国均匀码理事会在1973年建立了UPC系统,并且实现了该码制标准化。UPC首先在杂货零售业中试用,1974年6月25日,俄亥俄州的Marsh超级市场安装了由NCR制造的第一台UPC扫描器。在使用UPC的27种商品中,第一个被收银员沙龙·布坎南(Sharon Buchanan)扫描的是标价69美分的十片装箭牌口香糖。在十年内,条码扫描器攻占了一半的美国超市。至1989年,达到全美食品店的62%。
1992年香港惠康超級市場(台灣稱為「頂好」)成為全港第一家使用UPC系統的超市,為客人提供更快更方便的付款服務。根據2004-2008年的報告,惠康超級市場的分店數目因而提升。
编码规则
UPC只能用来表示0-9的数字。每7个模组表达一个字符,每个模组有空(白色)与条(黑色)两种状态。
UPC又分为UPC-A、B、C、D、E五种版本。
UPC-A
用于通用商品,是适用范围最广的UPC。一共有113个模组,每个模组长0.33毫米。左右两个各由9个模组组成的空白。UPC-A是定长码,只能表示12位数字。从左至右,依次是3个模组(101)的起始码、1位的系统码、5位的左侧数据码、5个模组(01010)的中间码、5位的右侧数据码、检查码、3个模组(101)的终止码。其中,起始码、中间码、终止码的模组长度都要长于数据码。
- 对应法则:左侧数据码与右侧数据码的数值对应规则并不相同,左侧数据码含有奇数个模组,右侧数据码含有偶数个。黑色模组对应逻辑值为1,白色则为0。
左侧资料码 | 右侧资料码 | |
数值 | 逻辑值 | 逻辑值 |
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 |
- 可以看出,左侧数据码是右侧数据码的反码。
- 以上图中的数字4为例:首先确定它是右侧数据码,然后读取出它的逻辑值:1011100。转换成条与空则是:细黑(1)、细白(0)、粗黑(111)、粗白(00)。
- 检查码:检查码为全部12位数据码最后一位。如果从左至右依次将数据码前十一位命名为N1-N11,检查码命名为C。则检查码C的计算方式如下:
- CC=(N1+N3+N5+N7+N9+N11)×3 +(N2+N4+N6+N8+N10),然后取个位;
- C=10–CC(若C值为10,则取0)。
- 以图中条码为例,CC=(0+6+0+2+1+5)×3+(3+0+0+9+4)=58,C=2
UPC-E
短码,总长度为8个字码。A码与E码之间数字的对应规则与最后一位检查码有关。如下:
检查码 | UPC-E | UPC-A |
0 | XXNNN0 | 0XX000-00NNN+检查码 |
1 | XXNNN1 | 0XX100-00NNN+检查码 |
2 | XXNNN2 | 0XX200-00NNN+检查码 |
3 | XXXNN3 | 0XXX00-000NN+检查码 |
4 | XXXXN4 | 0XXXX0-0000N+检查码 |
5 | XXXXX5 | 0XXXXX-00005+检查码 |
6 | XXXXX6 | 0XXXXX-00006+检查码 |
7 | XXXXX7 | 0XXXXX-00007+检查码 |
8 | XXXXX8 | 0XXXXX-00008+检查码 |
9 | XXXXX9 | 0XXXXX-00009+检查码 |
- 对应法则:至于数字与模组之间的对应关系,也与最后一位有关:
检查码 | 规则 |
0 | EEEOOO |
1 | EEOEOO |
2 | EEOOEO |
3 | EEOOOE |
4 | EOEEOO |
5 | EOOEEO |
6 | EOOOEE |
7 | EOEOEO |
8 | EOEOOE |
9 | EOOEOE |
E表示偶码,O表示奇码。UPC-E的奇码与UPC-A的奇码完全相同。
奇码 | 偶码 | |
数值 | 逻辑值 | 逻辑值 |
0 | 0001101 | 0100111 |
1 | 0011001 | 0110011 |
2 | 0010011 | 0011011 |
3 | 0111101 | 0100001 |
4 | 0100011 | 0011101 |
5 | 0110001 | 0111001 |
6 | 0101111 | 0000101 |
7 | 0111011 | 0010001 |
8 | 0110111 | 0001001 |
9 | 0001011 | 0010111 |
- 检验码:计算UPC-E的检查码时,先将其转换为对应的UPC-A,然后按照一样的模式计算出检查码即可。
参考文献
- Fox, Margalit. . 纽约时报中文网. [2024-03-24]. (原始内容存档于2017-01-04).
- . University of Maryland Alumni Association. The University of Maryland. 2005 [2009-06-10]. (原始内容存档于2007-06-23).
After graduating from Maryland in 1951, George Laurer joined IBM as a junior engineer and worked up the ranks to senior engineer. In 1969, he returned to the technical side of engineering and was later assigned the monumental task of designing a code and symbol for product identification for the Uniform Grocery Product Code Council. His solution — the Universal Product Code — radically changed the retail world. Since then, he has enhanced the code by adding a 13th digit. Laurer retired from IBM in 1987. He holds some 25 patents and is a member of the university’s A. James Clark School of Engineering Hall of Fame.
- . UNWIRE HK. 2011年6月17日 [2017-01-03]. (原始内容存档于2017-01-04).
- (简体中文)UPC码
- (繁體中文)UPC条码 (页面存档备份,存于)
- (英文)UPC码30年
- (英文)IBM公司对于条码的影响 (页面存档备份,存于)
- (英文)BarcodeRobot (页面存档备份,存于)
- (英文)条码历史