参考文档:

https://www.thonky.com/qr-code-tutorial/error-correction-coding

1. 消息多项式

消息多项式的系数组成:数字码字。如“hello world” ,利用二维码的编码原理,转换成十进制数字为“32, 91, 11, 120, 209, 114, 220, 77, 67, 64, 236, 17, 236, 17, 236, 17”,因此,这个语句的消息多项式为:

2. 生成多项式

生成多项式可以用下面这个式子概括:

n是生成的纠错码字的数量,α一般默认为2。为了方便进行多项式的出发,我们需要对生成多项式进行展开。

拿最简单的n=2举个例子(以下大部分步骤都是废话):

=

=

=

=

因为α默认为2,而且在GF(256)中,加法用异或操作,所以

=

=

这样就得到生成多项式了。

注意,在这里的指数大于255也是不行的,一旦超过255,就要通过对255取模的方式来降一降。

从下面这个网址可以轻松得到n≥7的时候的生成多项式

https://www.thonky.com/qr-code-tutorial/generator-polynomial-tool?degree=7

注:GF(256)是啥?QR Code标准表示使用逐位模2算术和逐字节模100011101算法,也就是使用伽罗瓦域2^8,或者伽罗瓦域256,有时写为GF(256)。GF(256)的范围是0~255。简而言之,在这个神奇的领域里面,超过255是不允许的,一旦超过就要通过异或的方式来降一降。比如说2^8=256,因此需要和100011101进行异或操作来得到最终的值,所以2^8=256^285=58。2^9=58*2=116。2^10=116*2=232。……

3.进行除法

将生成多项式除以消息多项式来得到最后的结果。普通的多项式除法一般大家以前都接触过,但在这里不是在乘法步骤之后减去,而是执行XOR(在GF(256)中,其实就是一样的)。
就不多介绍。

步骤可以分为以下三步:

1. 找到适当的项乘生成多项式,使得乘法的结果与消息多项式具有相同的第一项。

2. 使用消息多项式(在第一个乘法步骤中)或余数(在所有后续乘法步骤中)对结果进行异或。

3. 执行这些步骤n次,其中n是消息多项式中的系数。

在进行两个多项式的除法之后,将有一个余数。 该余数的系数是纠错码字。

拿完整的消息多项式和生成多项式做一个例子。

完整的消息多项式如下(Hello world的例子):

为了确保在除法期间引导项的指数不会变得太小,将消息多项式乘以x^n,n是所需的纠错码字的数量。如当纠错码字的数量是10时,上式应该变成:

生成多项式的前导项也应该具有相同的指数,因此生成多项式也乘x^15得到下式(这里的原始生成多项式可以从上面给的链接里面轻松得到)

具体开始步骤:

1. 将生成多项式乘以消息多项式的前导项。消息多项式的前导项是32,也就是α^5,乘上生成多项式后,生成多项式变成

=

=

注意,指数的值不能超过255,一旦超过就要进行对255取模的操作。

可以明显看出经过上面这些步骤(保持指数相同,将消息多项式的前导码乘到生成多项式上),生成多项式和信息多项式拥有了完全相同的第一项。

2. 使用消息多项式对结果进行异或;从下面这个式子也可以看出来,就是消息多项式和生成多项式中相同次数的项的系数进行了异或操作,经过这个操作之后,消息多项式中最高次数的项已经没有了(因为生成多项式和消息多项式拥有完全相同的第一项,一异或就没了)。

=

=

3. 将生成多项式乘上一步的XOR结果的前导项。注意,这里的生成多项式已经经过了和现在的信息多项式等指数的过程,所以最高次是24。

在这个例子中,前导项是89x^24,做乘法的时候,把数字用α表示比较简单,89又等于α^210(这个可以查表得),所以

=

=

4.将上一步得到的式子继续重复类似步骤2的异或操作,这个操作之后,最前面那项(次数为24次的那项)又成功没有了。

=

=

接下来这一步就可以想象啦,就是把61乘到原始的生成多项式上,把指数对好了的生成多项式和上一步得到的式子进行异或操作。

那么重复到什么时候好呢?从上面可以看出来,循环一次,就有一个消息多项式中的一项被消除,所以消息多项式有多少项,就进行多少次循环(这就好像除法进行到了最后一位)。上述例子循环16次后,就得到了下面这个式子(从这个式子中我们就可以看出来,刚开始的时候乘x^10有多明智,为什么是10而不是9或者8也从这里可以看出,因为生成多项式的最高次数是纠错码字的数目,一项项异或之后,最后的余数的位数和生成多项式的位数是相关的)

现在我们就得到纠错码字了:196  35   39  119  235  215  231  226  93  23

得到纠错码字之后就是按照规范给填到二维码的格子里面。

二维码的纠错码原理及细节相关推荐

  1. 二维码的纠错码原理及如何纠错(2)

    下面进一步介绍二维码纠错相关的编码矩阵 1 范德蒙德(Vandermonde)矩阵 1.1 定义及特性 法国数学家 Alexandre-Théophile Vandermonde 在十八世纪提出了行列 ...

  2. 聊一聊二维码扫描登录原理

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2 个月的面试亲身经历告诉大家,如何进入大厂? 扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且 ...

  3. 二维码的生成原理是什么

    二维码是一种用来表示文本或者网址的图像,它通常是一个黑白相间的方块组成的图案.二维码的生成原理是将文本或者网址先编码成一个二进制数据流,然后在图像中用不同的黑白色块来表示这些二进制数据.在生成二维码时 ...

  4. 二维码(QR code)原理解析

    二维码(QR code)原理解析 基于 <GB/T 18284-2000 快速响应矩阵码> 文章目录 二维码(QR code)原理解析 1 模式 1.1 ECI 模式 1.2 数字模式 1 ...

  5. 二维码的工作原理是什么?

    二维码无处不在,加好友扫一扫,付款扫一扫,下载文件扫一扫,进入小程序扫一扫,品牌需要二维码,商铺需要二维码,好像只有随处扫一扫二维码,才能觉得和这个世界接轨上了. 有人问这么多的二维码是谁制造出来的呢 ...

  6. 微信二维码扫描登录原理解析

    扫二维码登录现在比较常见,比如微信.支付宝等 PC 端登录,并且好像每款 APP 都支持扫码登录. 一,传统项目移动端基于 token 的认证机制 在了解扫码登录原理之前,有必要先了解移动端基于 to ...

  7. 你知道二维码的图案原理吗?

    常见的二维码上为啥三个角上有方块?二维码为什么是黑白相间的?为什么扫二维码的一部分也能看到信息?请看南京邮电大学计算机学院副教授黄海平做详细分析. 随着苹果手机的研发及安卓系统的市场铺张式的发展,使得 ...

  8. 二维码是什么原理?第一次有人说得这么明白

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 生活在数字时代的我们,很多场合都用到了二维码 ...

  9. 【精】微信小程序生成二维码海报分享 [原理+源码]

    关于海报分享的教程数不胜数, 但是我没能找到一个好用的, 为了实现这个功能结合了三篇教程耗时三天才把海报搞定; 首先网络上教程都是直接上教程代码, 然后代码加思路, 对小白我来说就是一头雾水, 只能边 ...

  10. 扫描二维码登陆实现原理

    扫码登录操作过程 浏览器输入:https://wx.qq.com/?lang=zh_CN 手机登录微信,利用"扫一扫"功能扫描网页上的二维码 手机扫描成功后,提示"登录网 ...

最新文章

  1. windows server 2008 R2上安装MRTG指南
  2. Nat. Commun | 基于网络的药物组合预测
  3. C/C++结构体的区别
  4. vi命令,印在杯子上,还是印在脑子里。
  5. 这周开发工作时间及内容、思考和阅读的内容
  6. 计算机网络-思维导图(3)数据链路层
  7. Django的电子商务网站的调研
  8. c#解决在数据表格中无法显示秒数问题
  9. 唐刘之辩:行业知识图谱的schema构建的难点、重点与困惑
  10. html表格统计表,jQuery操作表格(table)的常用方法、技巧汇总
  11. android去掉顶部标题栏
  12. 2011年3月四级网络工程师笔试试卷 解答思路
  13. Win7使用之查端口,杀进程
  14. python ppt表格样式展示
  15. linux内核编译指定驱动,linux内核编译,配置本机驱动
  16. 太强了!GitHub中文开源项目榜单出炉,暴露了程序员的硬性需求!
  17. python安装Jpype
  18. python选择题题库百度文库_Python题库
  19. google license key格式不对
  20. HTML 内容保存到word文档(angular4调用第三方js插件实现)

热门文章

  1. Python 算法之 动态规划详解
  2. JAVA数组内存分析 面向对象 类和对象 创建对象的内存分析 成员变量 局部变量
  3. IT十八掌徐培成第一天笔记
  4. 大数据第三季--Hbase(day6)-徐培成-专题视频课程
  5. 学习双拼必看(最全教程):双拼输入法的心得以及快速入门办法
  6. 阿里ICON图标,使用教程
  7. 爱数私有云盘 AnyShare 部署(一)
  8. VC++LNK2005错误:already defined in *.obj
  9. php bzip2 安装,bzip2 linux 安装 yum
  10. Android精仿淘宝/QQ空间标题栏渐变效果