Maxicode的缘起和发展

1980年代晚期,美国知名的UPS(United Parcel Service)快递公司认知到利用机器辨读资讯可有效改善作业效率、提高服务品质,故从1987年开始着手於机器可读表单(Machine Readable Form)的研究,发觉到条码是相对成本最低的可行方案。为了能达到高速扫瞄的目的,UPS舍弃了堆叠式二维条码的做法,重新研发一种新的条码,在1992年时推出UPS code,并研发出相关设备,此即Maxicode的前身。1996年时,美国自动辨识协会(AIMUSA)制定统一的符号规格,称为Maxicode,也有人称USS-Maxicode(Uniform Symbology Specification- Maxicode)。本文所指的Maxicode,都是遵循AIMUSA所制订的标准。

Maxicode是一种中等容量、尺寸固定的矩阵式二维条码,它由紧密相连的六边形模组和位於符号中央位置的定位图形所组成。Maxicode是特别为高速扫瞄而设计,主要应用於包裹搜寻和追踪上。UPS除了将Maxicode应用到包裹的分类、追踪作业上,并打算推广到其他应用上。1992年与1996年所推出的Maxicode符号规格略有不同,就外观上来看,图1的左边是1992年刚推出的样子,右边则是现在Maxicode应有的样子。

图1 Maxicode的外观

Maxicode的基本特征

外形近乎正方形,由位於符号中央的同心圆(或称公牛眼)定位图形 (Finder Pattern),及其周围六边形蜂巢式结构的资料位元所组成,这种排列方式使得Maxicode可从任意方向快速扫瞄。其外观与中心放大图如图2所示。

Maxicode外观与中心放大图

符号大小固定。为了方便定位,使解码更容易,以加快扫瞄速度,Maxicode的图形大小与资料容量大小都是固定的,图形固定约1平方英寸,资料容量最多93个字元。

定位图形:Maxicode具有一个大小固定且唯一的中央定位图形,为叁个黑色的同心圆,用於扫瞄定位。此定位图形位在资料模组所围成的虚拟六边形的正中央,在此虚拟六边形的六个顶点上各有3个黑白色不同组合式所构成的模组,称为「方位丛」(Orientation Cluster),其提供扫瞄器重要的方位资讯,见图3。

图3 Maxicode的符号排列方式

每个Maxicode均将资料栏位划分成两大部分,围在定位图形周围的深灰色蜂巢称为主要讯息(Primary Messages),其包含的资料较少,主要用来储存高安全性的资料,通常是用来分类或追踪的关键资讯,其包括60个资料位元(bits)和60个错误纠正位元。

主要讯息有两个特殊作用,其中最重要的是包含4个模式位元(Mode Bits),围在定位图形右上方全白的方位丛左边,以淡灰色所标识的四个位元即是,其直接指示出其馀的资料编码模式。另一个用途是,剩馀的56个资料位元则依包裹分类追踪需要的所有资讯编码成结构化收件人讯息(Structured Carrier Messages),因此大部份在高速扫瞄的状况下,只需要将主要讯息解码就够了。

在主要讯息外围的淡灰色部份(未表示完全),用来储存次要讯息(Secondary Messages),其提供额外的讯息,如来源地、目的地等人工分类时所需的重要资讯。
 

模式:是一种允许符号有不同结构的机制,Maxicode共有7种模式(模式0~模式6),但其中有2个模式(模式0、模式1)已作废。

(二) 错误纠正能力
Maxicode具有复杂而坚固的错误纠正能力,以确保符号中的资讯是正确的,就算条码受到部份损毁,内部储存的资讯仍可完整读出。

(叁) 解码速度 
Maxicode的最大优点在於其解码速度相当快,Maxicode可在速度为每分钟550英 的输送带上成功读取。

Maxicode的组成

编码字元集
Maxicode允许对256个国际字符编码,包括值0~127的ASCII字元和128~255的扩展ASCII字元。在数字组合模式下,可用6个字码表示9位数字。用於代码切换和其他控制字元也包括在其字元集中。

Maxicode符号字元的表示

每个字元由6个六边形的模组组成。

每个模组表示一个二进制位,深色模组表示 “1” ,浅色模组表示 “0”。

通常六个模组排成3层,顺序为右上至左下,见图4所示。

图4 Maxicode的位元组成排列方式

由於Maxicode符号的特殊结构,符号字元具有特殊的排列形式。

字码集
字码是介於数字字元和符号字元间的值,也是错误纠正计算的基础。Maxicode的字码集共有64个,范围为0~63,二进位表示为000000~111111。在每符号字元中,最高有效位是编号最低的模组。

符号尺寸
每个Maxicode符号共有884个六边形模组,分33层围绕着中央定位图形,每一层分别由30个或29个模组组成。符号四周应有空白区。每个Maxicode包括空白区在内,尺寸固定为28.14mm×26.91mm,约1平方英寸。中央定位图形相当於90个模组的大小。

资料容量
884个六边形模组中,有18个模组用於定位,剩馀866个为资料模组,扣掉2个未使用的模组,用於表示资料编码和错误纠正的模组共有864个,包含144个6位元的符号字元,其中至少须有50个以上的错误纠正字元,以及1个模式字元,因此资料容量最大为93个字元,若纯为数字字元,则可存放138个。

错误纠正
Maxicode提供标准错误纠正(Standard Error Correction, SEC)与增强错误纠正(Extended Error Correction, EEC)两种错误纠正等级,这两种等级需要不同数量的字,提供不同水准的错误恢复能力,SEC的错误复原能力达16%,EEC则可达25%。采用哪一种错误纠正等级是由模式字元所指定。

Maxicode的模式

如前所述,每个Maxicode有1个模式字元,用来定义符号的资料与错误结构,模式的编码是主要讯息的一部份。

原本於1992年推出的UPS code的规格只有两种模式:

模式0:主要讯息为一个结构化收件人讯息,次要讯息至多可编入84个大写英文字母,或数字、标点符号。

模式1:主要讯息加上次要讯息至多可编入93个大写英文字母,或数字、标点符号。

不过上述两种模式已废除,由新规定的模式2和模式3取代模式0,由模式4取代模式1。AIMUSA所规定的新模式及其内容为:

模式2:主要讯息为一个结构化收件人讯息加上一个数字型态的邮递编号,次要讯息至多可编入84个字元(character)。

模式3:主要讯息为一个结构化收件人讯息加上一个文数字型态的邮递编号,次要讯息至多可编入84个字元。

模式2及模式3适用於运输业者,此时符号表示收件人定义的目的地地址及服务类型。符号的前120位用增强错误纠正(EEC)表示收件人结构化资讯,而符号的其馀部份用标准错误纠正(SEC)表示其它资讯。

Maxicode码的更多相关文章

  1. Java 条形码 二维码 的生成与解析

    Barcode简介 Barcode是由一组按一定编码规则排列的条,空符号,用以表示一定的字符,数字及符号组成的,一种机器可读的数据表示方式. Barcode的形式多种多样,按照它们的外观分类: Lin ...

  2. 集成自动化的条形码功能到internet应用程序,网站或自定义Java应用程序的条码控件Java Barcode Package

    Java Barcode Package控件是一款条码生成控件,包含所有的JavaBean,Applets,Servlets和类库可以使用于装有Java虚拟机的任何平台,包括Windows®, Lin ...

  3. Atitit 常用二维码对比(QR、PDF417、DM、汉信码 Aztec code maxicode

    Atitit 常用二维码对比(QR.PDF417.DM.汉信码 Aztec code maxicode DM码则更"小",可在仅仅25mm²的面积上编码30个数字.但也就是因为太小 ...

  4. 【Demo】 生成二维码 和 条形码

    条形码 和 二维码 对比 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准. 在水平和垂直方向的二维空间存储信息的条形码, 称为 ...

  5. zxing二维码扫描的流程简析(Android版)

    目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...

  6. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  7. 二维码扫描开源库ZXing定制化【转】

    转自:http://www.cnblogs.com/sickworm/p/4562081.html 最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. ...

  8. 二维码扫描开源库ZXing定制化

    最近在用ZXing这个开源库做二维码的扫描模块,开发过程的一些代码修改和裁剪的经验和大家分享一下. 建议: 如果需要集成到自己的app上,而不是做一个demo,不推荐用ZXing的Android外围开 ...

  9. 扫描二维码的实现(barcode) ---- HTML5+

    模块:barcode Barcode模块管理条码扫描,提供常见的条码(二维码及一维码)的扫描识别功能,可调用设备的摄像头对条码图片扫描进行数据输入.通过plus.barcode可获取条码码管理对象. ...

随机推荐

  1. 用JavaScript判断横屏竖屏问题

    判断手机横竖屏状态: //判断手机横竖屏状态: function hengshuping() { if(window.orientation == 180 || window.orientation= ...

  2. C++面向对象类的书写相关细节梳理

    类的问题 继承类的原因:为了添加或者替换功能. 1. 继承时重写类的方法 v 替换功能 ① 将所有方法都设置为virtual(虚函数),以防万一. Virtual:经验表明最好将所有方法都设置为vir ...

  3. [Swust OJ 582]--放学了,抢机子了(SPFA)

    题目链接:http://acm.swust.edu.cn/problem/0582/ Time limit(ms): 5000 Memory limit(kb): 65535   Descriptio ...

  4. BZOJ 1207: [HNOI2004]打鼹鼠( dp )

    dp.. dp[ i ] = max( dp[ j ] + 1 ) ------------------------------------------------------------------ ...

  5. CDH 无法查看history log

    1.配置(core-site.xml) <property>  <name>hadoop.http.staticuser.user</name>  <valu ...

  6. this function has none of deterministic, no sql,or reads sql data in its declaration and binary logging is enabled

      原址:http://blog.chinaunix.net/uid-20639775-id-3031821.html   This function has none of DETERMINISTI ...

  7. LintCode-乘积最大子序列

    题目描述: 找出一个序列中乘积最大的连续子序列(至少包含一个数). 样例: 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6. 第一种解法,同最大和子序列的暴力求解法 ...

  8. IMP-00008: unrecognized statement in the export file: string的问题分析

    分类: Linux 上周需要将oracle10g中的某一个用户下的对象导入到oracle11g中去.用exp在10g的数据库服务器上导出的dump文件,再用imp在11g的数据库服务器上将dump文件 ...

  9. spring与redis集成之aop整合方案

    java使用redis缓存可以使用jedis框架,jedis操作简单,没有什么复杂的东西需要学习,网上资料很多,随便看看就会了. 将spring与redis缓存集成,其实也是使用jedis框架,只不过 ...

  10. C Looooops(扩展欧几里德)

    C Looooops Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total S ...