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 码的大小是由基于数据大小、字符类型、错误正确性级别来确定符号版本,以及基于打印机打印或扫描的性能来设置模块大小。

qrsizefig

图 1 QR 码大小的决定因素

符号版本

符号版本

QR 码的符号版本从版本 1 到版本 40.每个版本有不同的模块配置或模块数量。模块是构成 QR 码的黑白块。

“模块配置”是指一个符号中包含模块的数量,从版本 1 的(21 × 21 模块数)开始,到版本 40 的(177 × 177 )。每个更高的版本由每个边额外的4个模块组成。

qrversion

图 2 符号版本

根据数据数量,字符类型和错误正确性等级,每个 QR 码符号版本都有其最大的数据容量。检查每个版本的最大数据容量。参看 http://www.denso-wave.com/qrcode/vertable1-e.html

随着数据量的增加,QR 码需要更多的模块。

纠错率

QR 码具有纠错能力,以便在 QR 码脏了,或是被损坏后,来恢复数据。根据操作环境,用户可以选择 4 个等级。更高的等级会提高纠错能力,但是也增加了 QR 码的大小。

表 1 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

图 3 版本 1 的 QR Code(21 × 21 模块):左边的模块大小为 0.5 平方毫米。右边为 1 平方毫米

较大的模块更稳定,更容易用 QR 码扫描仪读取。另外,QR 码符号大小变大,就需要更大的打印面积。

因此,考虑所有相关因素后,需要确定每个应用程序的模块大小。建议 QR 码符号尽可能在可用的打印区域内打印。

打印机头密度与模块大小

标准热敏捷转换/直接打印机的模块大小取决于打印机头点的数量。

例如,若打印头密度为 300 dpi,且每个模块由 5 个点组成,则模块大小为 0.42 平方毫米。增加点的数量能提高打印质量,并且使操作更稳定。

建议每个模块由 4 个或更多点组成会获得更稳定的操作。

图 4 个点的模块 表 2 打印机和模块大小关系

图 4 个点的模块(左)

表 2 打印机和模块大小关系(右)

扫描仪因素

每个扫描仪都有自己的可读模块大小限制。扫描仪分辨率表示它的限制。

例如,若用一个 600 dpi、4 针的打印机打印一个 QR 码,则模块大小为 0.17 毫米。一个至少小于 0.17 毫米的扫描仪分辨率才能读取符号。

若超过扫描仪的读取限制,那么,用一个高密度的打印机在有限的区域打印小的是没用的。

在确定要使用的模块大小前,考虑采用什么样的扫描仪。

QR 码区域

安全边距

当确定了符号版本和模块大小,也就确定了 QR 码符号的大小。QR 码符号区域需要一个在其周围的边距。

边距是一个 QR 码周围的空白、干净区域,没有任何东西可以打印。QR 码在其所有的变需要一个 4 个模块宽的边距。

qrmargin

图 5 在一个 QR 码的四周要求 4 个模块宽度的边距

计算 QR 码区域的示例

下面是计算含边距的 QR 码包区域的示例。例如,生成 50 个字母数字字符的 QR 码:

  1. 指定纠错率为 M 级别。
  2. 版本和最大数据量获得版本(列为 Alfanumeric,行为 M,两个交值就是最大数据量)。版本 3 可以存储 50 个或更多字符。版本 2 在 M 级别时只能存储 38 个字符。
  3. 使用 400 dpi 分辨率的打印机。当使用 4 针打印时,是 0.254 mm(25.4 mm/inch ÷ 400 dpi × 4 dots/module = 0.254 mm/module)
  4. 版本 3 为 29 模块,因此,QR 码的大小为 29 modules × 0.254 mm/module = 7.366 mm。
  5. 安全 4 模块边距为 7.366mm + 0.254mm/module × 8 modules =9.398mm。

也就是,QR 码区域为 9.398 平方毫米。

QR 码区域过大

若 QR 码区域过大,不适合打印,可以考虑下面三个方法:

  1. 减少符号版本。
  2. 使模块尺寸小点。
  3. 分割 QR 码。

下载 Demo

原文地址:https://www.cnblogs.com/liuning8023/p/2514040.html