第二节 科学家的执念
1948年,美国费城,一名超市经理去了位于当地的德雷塞尔大学(Drexel University)。这名没在史料中留下姓名的超市经理找到了一名系主任,恳求他帮忙开发一种能够高效率地对产品进行编码的方法,达到在结账时自动获取产品信息的目的。
系主任并没有把这名超市经理和他提出的技术需求当回事,但这段对话却在不经意间被德雷塞尔大学的研究员伯纳德·西尔弗(Bernard Silver)听到。西尔弗对这项技术需求产生了强烈的兴趣,并说服了他的同学——诺曼·约瑟夫·伍德兰(Norman Joseph Woodland, 1921—2012)一起开展研究。他们最初曾试图用荧光墨水印制产品信息,并借助紫外光实现读取,但这一想法并没有成功。
1948—1949年冬天,伍德兰从研究生院退学并辞去了他的教学工作,从美国东北部的费城搬到了位于迈阿密的祖父家居住,从而可以潜心研究。有一次,当伍德兰坐在沙滩上发呆时,突然意识到要以视觉形式呈现信息,就必须有一种编码。而少年时期学的"摩尔斯电码"是他唯一知道的编码形式。于是他开始用手指在沙土上画点和破折号,形状类似于摩尔斯电码。之后他不经意间将手指插入沙土中,向下拉,结果是在沙滩上形成了一排平行线条。用手指所形成的细线代表点,然后形成的粗线代表破折号。
摩尔斯电码
"假如优雅简约、组合无限的摩尔斯电码被改编成图形,会怎么样呢?我把四根手指插入沙子,不知为何向着自己划出四条线。天哪!现在我有四条线,它们可宽可窄,可以代替点和线。"在几十年后的一次采访中,伍德兰说,仅仅几秒钟之后,他又用四根手指在沙子里划出一个圆。
现代条码的雏形,就诞生于这看似无意地用手指在沙地上划出的一组线条。
沙滩上的启发
伍德兰向西尔弗说了这个构想后,他们发明了一种可以替代摩尔斯电码的"公牛眼"码,并将其换成一个同心圆模式,从而实现面对来自任何方向的扫描。这种条码的图案很像微型射箭靶,靶的同心环由大小粗细不一的圆绘制而成。他们给这种由粗细不同的条纹组成的圆形线条带起了一个很朴素的名字:分类装置和方法(Classifying Apparatus and Method),并于1949年10月20日提起了专利申请。
1952年10月7日,伍德兰和西尔弗的发明获得了美国2612994号专利,专利涵盖了线性和环形同心圆印刷技术。此时,伍德兰已经到IBM工作,他曾建议IBM收购此项专利,但在价格上没有达成协议,于是两人将这项专利以1.5万美元卖给了飞歌公司(Philco),而这也是他们从自己的专利中赚到的所有钱。后来,飞歌公司又将专利转售给RCA公司。
西尔弗有生之年一直在德雷塞尔大学担任物理教师。直到1963年,年仅38岁的西尔弗去世。
"公牛眼"码
该图案很像微型射箭靶,称作"公牛眼"码。但遗憾的是,由于受当时的工艺和商品经济所限,还没有能力印制出这种码,因此这种"公牛眼"码未能成为此后世界上通用的商品条码。
伍德兰与条码的渊源并没有就此止步。20世纪60年代末,这项专利过期时,伍德兰仍在IBM公司工作。随着时间的推移,激光扫描技术和微型处理器相继问世,使条码大有可为。20世纪70年代早期,伍德兰在IBM的一名同事——乔治·J.劳雷尔(George J.Laurer),在伍德兰-西尔弗模型的基础上,设计了如今无所不在的黑白矩形条码,在此过程中,他吸取了伍德兰的很多建议。在获得发明专利20年后,身为IBM工程师的伍德兰成为北美地区的统一代码——UPC码的奠基人。
诺曼·约瑟夫·伍德兰
1992年,美国总统布什授予伍德兰"国家技术奖章",以奖励他在条码技术方面的发明;2011年,伍德兰被列入美国发明家名人堂。
早期的条码广泛应用于医疗、铁路、物流等领域。美国国防部军营超市管理处(DeCA)选择采用统一产品代码(Universal Product Code,UPC),军营超市管理处甚至派代表协助美国统一代码委员会(Uniform Code Council,UCC)为海运集装箱编制代码和标识。在美国政府开办的向个人售卖商品的商店里,采用了商用的商品代码系统,但对于美国政府采购的物品,则独自开发了一套商品代码体系。美国政府开发的这套代码体系称为国家储备原料号码(National Stock Number,NSN)。它采用39码标识系统。20世纪80年代,在工业领域,统一工业代码(Uniform Industrial Code,UIC)得到较为普遍的应用,但经过一段时间的使用后,在大约150 00个原用户中,只有200个继续使用统一工业代码(UIC),其他用户则选用UPC码。随着时间的推移,UIC逐渐退出,只剩下统一产品代码(UPC)还在应用。这种码制日后发展成北美地区广泛应用的UPC条码。
有趣的是,条码的应用还超越了地球的地理范围。1996年9月19日的《纽约时代》中报道了宇航员使用条码库存管理系统来追踪从航天飞机转运到航空站里的多种货品。由此可见,在命名UPC时,使用"Universal"(有"宇宙"之意),是没有夸张的。
而看似小巧的条码,其编码方式却是经历了无数次的推敲和实验才得来的。例如,常见的EAN/UPC条码就采用了被称为"模块组配法"的编码方式。这种编码方式是指条码符号中,条与空是由标准宽度的模块组合而成的。一个标准宽度的条模块表示二进制的"1",而一个标准宽度的空模块表示二进制的"0",并以它们的组合来表示某个数字字符,反映某种信息。另一个编码方法叫"宽度调节法",是以窄单元(条纹或间隔)表示逻辑值"0",以宽单元(条纹或间隔)表示逻辑值"1"。宽单元通常是窄单元的2~3倍。对于两个相邻的二进制数位,由条纹到间隔或由间隔到条纹,均存在着明显的印刷界限。39码、库德巴码及常用的25码、交插25码均属宽度调节型条码。
以EAN-13为例:
EAN/UPC字符集包括A子集、B子集和C子集。每个条码字符由2个"条"和2个"空"构成。每个"条"或"空"由1~4个模块组成,每个条码字符的总模块数为7。用二进制"1"表示"条"的模块,用二进制"0"表示"空"的模块。条码字符集可表示0~9共10个数字字符。
EAN/UPC条码字符集的二进制表示
A子集中条码字符所包含的"条"的模块的个数为奇数,称为奇排列;B、C子集中条码字符所包含的"条"的模块的个数为偶数,称为偶排列。
EAN/UPC条码字符集示意图
EAN-13条码由左侧空白区、起始符、左侧数据符、中间分隔符、右侧数据符、校验符、终止符、右侧空白区及供人识别字符组成。
EAN-13条码的符号结构
条码符号构成示意图
起始符、终止符的二进制表示都为"101"。
中间分隔符的二进制表示为"01010"。
起始符、终止符
中间分隔符
13代码中左侧的第一位数字为前置码。左侧数据符根据前置码的数值选用A、B子集。
左侧数据符根据前置码的数值选用A、B子集
在EAN条码符号二进制表示中,条码符号的左侧数据排列由前置码决定,右侧数据符的排列规律为CCCCCC。
为了更清晰的了解EAN/UPC条码的符号字符集表示,我们以代码6901234567892进行示例。其条码符号中的左侧数据符("901234")的排列形式是由前置码"6"来决定的,由"左侧数据符EAN/UPC条码字符集的选用规则"可查出数据排列规律为"ABBBAA",右侧数据符为"CCCCCC"因此,左、右数据符排列规律为"ABBBAACCCCCC"。进而对照"EAN/UPC条码字符集的二进制表示",我们就可以得出代码6901234567892的左、右侧数据符二进制标识。
代码6901234567892
如果加上起始符、终止符和分隔符,那么代码6901234567892的完整二进制表示就可以写成:"10100010110100111011001100110110111101 010001101010100111010100001000100100100011101001101100101",通过二进制的转化,条码就可以通过计算机快速读取。
在当时的历史条件下,不同种类的条码码制先后出现,但最终EAN/UPC条码由于其方便识读的特点获得了多数厂商的青睐,从众多码制脱颖而出并经受住了历史的考验,在全球得到成功应用。