如何计算每个QR码的最大数据位?

时间:2015-12-25 17:55:24

标签: qr-code

获取 QR版本40(177 * 177模块)的一些信息,修正级别 L(纠正7%)

  

版本: 40

     

错误更正级别:L

     

数据位: 23.648

     

数字模式: 7089

     

字母数字模式: 4296

     

字节模式: 2953

我不知道这些要点:

  1. 1个模块是否等于1位?

  2. 如何计算QR码类型中的最大数据位数?例如,为什么我们有23,648个数据位?

  3. 如何在QR码类型中将数据位转换为数字/字母数字?例如为什么我们的数字为7,089,字母数字为4,296?

  4. 全部谢谢!

    enter image description here

1 个答案:

答案 0 :(得分:3)

您引用的数字的推导是在生成ISO/IEC 18004详细描述的符号时执行的几个不同步骤的结果。

由于许多确定QR码符号结构的参数都是手动选择的,因此数据容量的任何公式都必然是笨拙和不明显的,因此实现通常必须包括这些非计算值的常量表。

如何推导可用数据位数

基本上,所选符号版本的数据模块总数将是总符号区域减去任何功能模式模块和格式/版本信息模块:

DataModules = Rows × Columns − ( FinderModules + AlignmentModules + TimingPatternModules ) − ( FormatInformationModules + VersionInformationModules )

这些参数的值是每个符号版本定义的常量。

然后将这些数据模块中的一些分配给由所选纠错级别定义的纠错目的。剩下的是通过将每个剩余模块视为单个位而找到的符号的可用数据容量:

UsableDataBits = DataModules − ErrorCorrectionBits

如何推导每种模式的字符容量

输入数据的编码以4位模式指示符开始,后跟字符计数值,其长度取决于符号的版本和模式。然后根据特定模式的规则对数据进行编码,从而产生以下数据压缩:

  • 数字 3个字符组成10位; 2个余数为7位; 1余数为4位。
  • 字母数字 2个字符组成11位; 1余数为6位。
  • 字节每个字符分为8位。
  • 汉字每个宽字符分为13位。

虽然它不影响符号容量,但为了完整性,我将指出附加了一个4位终结器模式,如果符号中的容量不足,可能会被截断或省略。然后用填充模式填充任何剩余的数据位。

工作示例

给出具有纠错级别L的版本40符号。

大小为177×177 = 31329个模块

有三个8×8取景器模式(192个模块),四十六个5×5对齐模式(1150个模块)和272个计时模块,共计1614个功能模块模块。

还有31个格式信息模块和36个版本信息模块,共计67个模块。

DataModules = 31329 − 1614 − 67 = 29648

纠错级别L指示应有750个8位纠错码字(6000位):

UsableDataBits = 29648 − 6000 = 23648

版本40符号的字符数长度指定如下:

  • 数字 14位。
  • 字母数字 13位。
  • 字节 16位。
  • 汉字 12位。

考虑字母数字编码。从可用的23648位的UsableDataBits数字中,我们将4位用于模式指示符,13位用于字符计数,只留下 23631 用于实际的字母数字数据(以及可截断的终结符和填充。 )

您引用4296作为版本40-L QR码符号的字母数字容量。现在4296个字母数字字符正好成为2148个两个字符的组,每个字符转换为11位,产生23628个数据位,就在我们的符号容量内。但是,4297个字符将产生2148个组,其中一个余数字符将被编码为6位,总共产生23628 + 6位 - 超过可用的23631位。因此,4296个字符显然是40-L QR码类型的正确字母数字容量。

类似地,对于数字编码,我们有23648-4-14 = 23630位可用。您引用的7089正好是2363组,每组三个字符,每个字符转换为10位,产生23630位 - 正好填充可用位。很明显,任何其他角色都不合适,所以我们找到了限制。

<强>买者

虽然在实践中可以使用上述过程导出字符容量,但QR码允许在单个符号内使用多个模式对输入进行编码,并且适当的QR码发生器将根据需要在模式之间切换以优化总体数据密度。这使得考虑容量限制的整个业务对开放应用程序的用处更少,因为它们只描述了病态情况。