如何计算每个二维码的最大数据位数? [英] How to calculate the maximum of data bits for each QR code?
问题描述
了解QR版本40(177*177模块)的一些信息L(7%纠错)
版本:40
纠错级别:l
数据位:23.648
数值模式:7089
字母数字模式:4296
字节模式:2953
我不知道以下几点:
1个模块等于1位吗?
如何计算一种二维码类型的最大数据位数?例如,为什么我们有23,648个数据位?
如何将二维码类型中的数据位转换为数字/字母数字?例如,为什么我们的数字是7,089,字母数字是4,296?
谢谢大家!
推荐答案
您引用的数字的派生是在生成ISO/IEC 18004详细描述的符号时执行的几个不同步骤的结果。
数据容量的任何公式都必然是笨拙和不明智的,因为决定QR Code符号结构的许多参数都是手动选择的,因此实施通常必须包括这些非计算值的常量表格。
如何计算可用数据位数
实质上,所选符号版本的数据模块总数等于符号总面积减去任何功能模式模块和格式/版本信息模块:
DataModules = Rows × Columns − ( FinderModules + AlignmentModules + TimingPatternModules ) − ( FormatInformationModules + VersionInformationModules )
这些参数的值是每个符号版本定义的常量。
然后,将这些数据模块中的一些分配给由所选纠错级别定义的纠错目的。剩下的是通过将剩余的每个模块视为单个比特而找到的符号的可用数据容量:UsableDataBits = DataModules − ErrorCorrectionBits
如何推导每种模式的字符容量
输入数据的编码从4位模式指示符开始,后跟字符计数值,其长度取决于符号和模式的版本。然后,根据特定模式的规则对数据进行编码,从而产生以下数据压缩:- 数值将3个字符分组为10位;2个余数分组为7位;1个余数分组为4位。
- 字母数字组2个字符组成11位;1个余数组成6位。
- 字节每个字符为8位。
- 汉字每个宽字符为13位。
样例
给定具有纠错级别L的版本40符号
大小为177×177=31329个模块
共有3个8×8取景器图案(192个模块)、46个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位。
您引用了4296作为版本40-L二维码符号的字母数字容量。现在4296个字母数字字符恰好变成了2148组两个字符的组,每个组被转换成11位,产生23628个数据位,正好在我们的符号容量之内。然而,4297个字符将产生2148个组,其中一个剩余字符将被编码成6比特,这总共产生23628+6比特--超过了可用的23631比特。因此,4296个字符显然是40-L二维码的正确字母数字容量。
类似地,对于数字编码,我们有23648−4−14=23630比特可用。你报价的7089正好是2363组,每组三个字符,每组转换成10位,产生23630位-准确地填满了可用的位。显然,任何其他字符都不适合,因此我们已经找到了限制。注意事项
虽然在实践中可以使用上述程序得出字符容量,但QR码允许在单个符号内使用多种模式对输入进行编码,并且像样的QR码生成器将根据需要在模式之间进行切换,以优化整体数据密度。这使得考虑容量限制的整个业务对开放应用程序的用处要小得多,因为它们只描述病态情况。这篇关于如何计算每个二维码的最大数据位数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!