QR 码
http://www.denso-wave.com/qrcode/qrgene1-e.html
本文内容
- QR 码概述
- QR 码系统设置
- QR 码大小的决定因素
- 符号版本
- 纠错率
- 纠错率特性
- 符号版本确定的示例
- 模块大小
- 设置模块大小
- 打印机头密度与模块大小
- 扫描仪因素
- QR 码区域
- 安全边距
- 计算 QR 码区域的示例
- QR 码区域过大
QR 码概述
QR 码系统设置
QR 码系统与 QR 码打印机(或 QR 码生成软件)和 QR 码扫描仪一起使用。
但无论是打印机,还是扫描仪,都不能自动生成可以被正确读取的 QR 码。生成可以适当读取的 QR 码,QR 码的大小很重要。
QR 码大小的决定因素
QR 码的大小是由基于数据大小、字符类型、错误正确性级别来确定符号版本,以及基于打印机打印或扫描的性能来设置模块大小。
图 1 QR 码大小的决定因素
符号版本
符号版本
QR 码的符号版本从版本 1 到版本 40.每个版本有不同的模块配置或模块数量。模块是构成 QR 码的黑白块。
“模块配置”是指一个符号中包含模块的数量,从版本 1 的(21 × 21 模块数)开始,到版本 40 的(177 × 177 )。每个更高的版本由每个边额外的4个模块组成。
图 2 符号版本
根据数据数量,字符类型和错误正确性等级,每个 QR 码符号版本都有其最大的数据容量。检查每个版本的最大数据容量。参看 http://www.denso-wave.com/qrcode/vertable1-e.html。
随着数据量的增加,QR 码需要更多的模块。
纠错率
QR 码具有纠错能力,以便在 QR 码脏了,或是被损坏后,来恢复数据。根据操作环境,用户可以选择 4 个等级。更高的等级会提高纠错能力,但是也增加了 QR 码的大小。
表 1 QR 码纠错率
整个 codewords 的数据恢复比率。codewords 是构成数据区的一个单元。一个 codewords 等于 8 比特。
若选择纠错率,需要考虑各种因素,如操作环境和 QR 码的大小。
在 QR 码码很容易被弄脏的地方,应该选择 Q 级别或 M 级别,而在比较干净,且数据量很大时,可以选择 L 级别。最常用的是 M 级别。
纠错率特性
QR 码纠错率是由增加一个 Reed-Solomon 码到原始数据。
纠错能力依赖被修正的数据量。例如,若有 100 个 codeword,其中 50 个需要修正,那么,就需要 100 个 Reed-Solomon 码,也就是 codeword 的两倍。
此时,codeword 的总数是 200 个,其中 50 个需要修正。因此,错误正确性比率是 50/200=25%。这是 L 级别。
在上面的例子,也可以看作是 50%。因此,QR 码表示 codeword 总数与错误的比率。
Reed-Solomon 码是一个数字式纠错,用于音乐 CD 等。
符号版本确定的示例
若有 100 位的数值数据,则设置为 "Numeric" 类型。接下来,指定纠错级别。然后,从版本和最大数据量获得版本(列为数据类型,行为纠错级别,两个交值就是最大数据量)。该值必须大等于 100,尽可能接近 100。若纠错级别为 M,则代码大小是 29x29 的模块,这相当于版本 3。
模块大小
设置模块大小
一旦确定了符号版本,QR 码符号的实际大小就依赖于要打印模块的毫米大小(组成 QR 码的一个方块区域)。
图 3 版本 1 的 QR Code(21 × 21 模块):左边的模块大小为 0.5 平方毫米。右边为 1 平方毫米
较大的模块更稳定,更容易用 QR 码扫描仪读取。另外,QR 码符号大小变大,就需要更大的打印面积。
因此,考虑所有相关因素后,需要确定每个应用程序的模块大小。建议 QR 码符号尽可能在可用的打印区域内打印。
打印机头密度与模块大小
标准热敏捷转换/直接打印机的模块大小取决于打印机头点的数量。
例如,若打印头密度为 300 dpi,且每个模块由 5 个点组成,则模块大小为 0.42 平方毫米。增加点的数量能提高打印质量,并且使操作更稳定。
建议每个模块由 4 个或更多点组成会获得更稳定的操作。
图 4 个点的模块(左)
表 2 打印机和模块大小关系(右)
扫描仪因素
每个扫描仪都有自己的可读模块大小限制。扫描仪分辨率表示它的限制。
例如,若用一个 600 dpi、4 针的打印机打印一个 QR 码,则模块大小为 0.17 毫米。一个至少小于 0.17 毫米的扫描仪分辨率才能读取符号。
若超过扫描仪的读取限制,那么,用一个高密度的打印机在有限的区域打印小的是没用的。
在确定要使用的模块大小前,考虑采用什么样的扫描仪。
QR 码区域
安全边距
当确定了符号版本和模块大小,也就确定了 QR 码符号的大小。QR 码符号区域需要一个在其周围的边距。
边距是一个 QR 码周围的空白、干净区域,没有任何东西可以打印。QR 码在其所有的变需要一个 4 个模块宽的边距。
图 5 在一个 QR 码的四周要求 4 个模块宽度的边距
计算 QR 码区域的示例
下面是计算含边距的 QR 码包区域的示例。例如,生成 50 个字母数字字符的 QR 码:
- 指定纠错率为 M 级别。
- 从版本和最大数据量获得版本(列为 Alfanumeric,行为 M,两个交值就是最大数据量)。版本 3 可以存储 50 个或更多字符。版本 2 在 M 级别时只能存储 38 个字符。
- 使用 400 dpi 分辨率的打印机。当使用 4 针打印时,是 0.254 mm(25.4 mm/inch ÷ 400 dpi × 4 dots/module = 0.254 mm/module)
- 版本 3 为 29 模块,因此,QR 码的大小为 29 modules × 0.254 mm/module = 7.366 mm。
- 安全 4 模块边距为 7.366mm + 0.254mm/module × 8 modules =9.398mm。
也就是,QR 码区域为 9.398 平方毫米。
QR 码区域过大
若 QR 码区域过大,不适合打印,可以考虑下面三个方法:
- 减少符号版本。
- 使模块尺寸小点。
- 分割 QR 码。