汉信码是"十五"期间中国物品编码中心主导开发出的不同于QR码的二维马码,主要针对汉字的编码方式进行了优化和扩展。但是从技术上讲与QR码的差别并不是很大,他们之间既有区别又有联系。
QR码作为最早支持多字节文字(遗憾的是最早只有日文汉字)编码的二维码,加上其独特的全方向性识别特性,在实际应用中得到了广泛的支持。中国为了更好地使用QR码,再此基础上进行修改,增加了中文汉字的编码方式,使其在中国大陆、台湾、香港、新加坡等采用汉字的地区得到了更好地应用。但由于QR码最早是由日本的一家公司发明的,中国对此一直报有谨慎的态度,因此心心念念希望搞出自己的自由只是产权的码制,但是鉴于中国的国情,没有有实力的企业为此而投资,最后只能呢个是国家投资,作为“十五"规划的一个重点科研项目之一,组织了一些企业一起,经过几年的努力终于研制出了一个中国人的标准--汉信码。
实际上,汉信码的象征意义远大于其实际意义。因为,尽管汉信码在表达汉字方面作了一些努力,但是其它方面的创新却并不尽如人意,这也造成了汉信码在国内和国际上的推广只是雷声大、雨点小的局面。究其原因,除了缺少相应的驱动机制之外,汉信码技术本身的不足也是一个重要的障碍。
关于这方面不是一两句话可以说得清楚的事情。本文就先从技术的角度具体分析一下汉信码和QR的方方面面。
从规格和尺寸上比较
QR 码分成 1~40 个不同的大小规格(也称为版本),大小从 21x21 开始依次增加4个模块直到177x177;而汉信码则分成 1~84 个不同大小的规格,大小从23x23开始依次增加2个模块直到189x189。QR码的最小尺寸可以做到21x21,而汉信码则只能是23x23,比QR码大,但汉信码却可以分得更细,这个方面应该算是旗鼓相当吧。
对二维码来说,允许得最小尺寸比最大尺寸更有意义,因为有些情况下面积有限,只需要表示少量的数据就可以了,那么那个码制允许的尺寸更小,那个码制就具有更大的优势。从这个意义上来说,实际上汉信码是略输一筹的。
从数据容量上比较
不同的尺寸比较数据容量是没有意义的,那么我们就比较一下相同尺寸下QR码和汉信码的数据容量。
实际在编码过程中的数据容量是一个多维参数综合后的结果,比较复杂。我们就假定采用单一编码模式、编码单一数据类型的情况下的数据容量进行对比。
纯数字情况下的比较:
二维码尺寸 | QR码容量(实际纠错率) | 汉信码容量(实际纠错率) | 结果 |
21x21 | 41(7.7%) | N/A | |
25x25 | 77(9.1%) | 69(8.1%) | QR码胜出 |
29x29 | 127(10%) | 105(7.4%) | QR码胜出 |
33x33 | 187(10%) | 162(8.3%) | QR码胜出 |
37x37 | 255(9.7%) | 231(7.7%) | QR码胜出 |
41x41 | 322(10.5%) | 309(7.7%) | QR码胜出 |
45x45 | 370(10.2%) | 363(7.7%) | QR码胜出 |
49x49 | 461(9.9%) | 447(8.0%) | QR码胜出 |
53x53 | 552(10.3%) | 543(8.1%) | QR码胜出 |
57x57 | 652(10.4%) | 651(8.0%) | QR码胜出 |
实际纠错率=可纠错的码字/总码字
可以看出汉信码不但纠错能力不如QR码,纯数字模式的容量就版本1~10来说还赶不上QR码。汉信码与QR码虽然都使用10位表示3个数字,由于QR码采用的”模式指示符(4位)+长度(8位)+数字编码“的方式,编码效率比较高;而汉信码则采用”模式指示符(4位)+数字编码+结束指示符(10位)“的方式,不但结束指示符比较长,而且在数字不识3的整数倍的情况先,白白算是了数据位,因此效率就要稍差一点点了。在QR码采用更多位表示长度的时候,两者的效率才基本持平。
由于QR码有Text模式,只要针对大写字母和网址等信息进行优化编码;而汉信码的Text模式则可以编码大小写字符和特殊符号,因此没有完全对等的编码模式。可以简单地这样比较:
如果编码单纯的域名,QR码可以采用大写字母,使用11位表示2个字符,而汉信码只能使用2个6位即12位表示2个字符,因此QR码会略胜一筹;但是如果包括有小写字母,则汉信码会完胜QR码。
从纠错能力上比较
纠错能力是二维码的核心特征之一,较强的纠错能力是二维码在快速自动识别领域得以广泛利用的前提和基础,也是二维码与条形码的本质区别之一。汉信码与QR码采用同样的纠错算法 Reed Solomon 提供的纠错能力也与QR码一样,都分成4个纠错等级:
QR码的纠错能力 | 汉信码的纠错能力 |
---|---|
L级:7% | 0级:8% |
M级:15% | 1级:15% |
H级:23% | 2级:23% |
Q级:30% | 3级:30% |
纠错能力的计算=可纠正的错误码字数/总码字数
结论:这一点也是完全一样。因为纠错的算法一样,纠错能力应该是同一水平的。至于官方给出的数字为什么会有差异,这就没有必要去深究了,主要是各自对效果的计算方法和计算结果的选取上不太一样造成的。
简单来说 QR 码的纠错能力那是最小值,汉信码则近乎是最大值;
从定位方法上比较
二维码的定位是二维码的核心算法之一,也是二维码最关键的技术。
QR码采用三个“类回字”形的定位孔进行定位的方法。也就是说QR码无论旋转多少度,水平扫描都可以检测到定位孔。
汉信码则采用4个1/4“类回字”形的进行符号定位,这样虽然规避了知识产权的风险,但是与QR码相比,可检测性大大降低,全方向性也不再支持,这一点是无法与QR码相比的,也不得不说这是汉信码设计的一大败笔。汉信码在一定角度的范围内水平扫描可以检测出汉信码的定位孔,但是在有些角度是无法检测到定位孔的。
从辅助定位方法上比较
辅助定位是二维码抗变型、抗畸变、抗失真的重要手段。辅助定位设计好坏直接关系到二维码抗失真、抗变型、抗畸变能力的优劣。
QR码采用简单的小“回”字方案,汉信码采用较为复杂的折线段的方法。显然QR码的方法更为高明,不但易于全方向性检测、还不过分占用空间。
就检测的速度相对来说QR码要快,汉信码就略输一筹了,因为要实现矫正就需要实现多辅助定位条线段的检测,辅助定位线不但更占据有效的编码空间,还增加了检测的时间。撇开编码方案的设计,即使同样的编码方案,QR码的容量也会比汉信码要大。
因此辅助定位方面QR码也是要更胜一筹。
编码方案比较
二维码的编码方案虽然不是什么复杂的技术,但是设计良好的编码方案在实际应用中会大大提高编码的效率。
这一点无论是QR码还是汉信码都有极大的改进空间。但对于汉字来说毫无疑问汉信码完胜QR码,这也是汉信码唯一的亮点--汉字的编码能力强。
QR码主要采用“模式指示符(4位)+内容长度+编码内容”的方式,支持6种编码模式
纯数字模式:10位表示3个数字
大写字母模式:使用11位表示2个大写字母和部分符号
二进制模式:使用8位表示一个字节
日文汉字模式(SJIS):使用13位表示一个日文SJIS汉字
中文汉字模式(GB2312):使用13位表示一个GB2312汉字
ECI模式
FNC1模式:支持FNC1
汉信码主要采用“模式指示符(4位)+编码内容+结束符”的方式,支持8种编码模式
纯数字模式:10位表示3个数字
Text字符模式:6位表示1个字符(GBT 11383种规定的常用字符)
二进制模式:8位表示一个字节
常用汉字1区:用12位表示1个汉字
常用汉字2区:用12位表示1个汉字
GB18030双字节模式:15位表示1个汉字
GB18030四字节模式:21位表示1个汉字
ECI模式
但是汉信码居然不支持FNC1,也就是GS1,也不支持自动分割或者说宏编码,这有点让人大迭眼镜,不得不说,汉信码给人一种草草收场的感觉。很多方面简直是QR码的一种倒退。
也许有人说,宏编码用处不大,因此没有设计。但汉信码不支持 FNC1 那简直是对未来的把握缺失。在 GS1 大力推行的今天,汉信码居然不支持 FNC1 编码,那只能说明设计时没有前瞻性了。在目前很多之前设计的二维码都支持 FNC1 和宏编码的情况下,汉信码对这些缺失,不得不让人有点不好意思。
况且,前面还有一个现成的标准 QR 码作为参考,这不得不让人深思。