美文网首页
浅谈“码”

浅谈“码”

作者: scrollHeart | 来源:发表于2024-06-23 14:47 被阅读0次

    一、 码的历史来源:

    1948年,有两个年轻人伯纳德·希尔弗和诺曼·伍德兰读研期间,听到食品连锁超市董事长与校长的谈话。
    董事长希望学校能帮助他们研制一个设备,在收银员结账时,可以自动得到商品的信息。引起他俩的兴趣


    诺曼·伍德兰-乔治·劳雷尔-伯纳德·希尔弗.jpeg 圆形码.jpeg

    1949年10月20日,他们提交专利申请,详细阐明条形码的结构和读码器的设计原理。
    1952年10月7日,这项专利被批准,虽然伍德兰为自己设想的圆形码申请了专利,当时却没有足够的计算技术来开发

    1970年代乔治·劳雷尔在IBM担任工程师时,开发了如今长方形的通用产品代码(UPC),即俗称的条形码,劳雷尔认为,用条纹而非圆圈要更好——他觉得伍德兰的图案太大了,扫描和印刷的时候都容易出现问题

    二、条形码的组成和读码器

    在组成它的12位数字中,国别代码2位,厂商代码4位,产品代码5位,校验码1位;在黑白粗细条纹中,黑线条为0,白线条为1,不同的粗细代表0和1的个数不同。按照这样的办法,就可以把十进位的自然数0,1,2,…,8,9等改变为二进制的0和1的组合

    读码器自带激光光源,它从条形码的反光中接收到0和1的电脉冲信号,根据信号的持续时间,判断条形码的线条宽度和所用的编码类别,再根据编码规则就可以将所收到的信号转换为0~9的数字。如果读码器装有识别数字功能的软件,还可以直接读出条形码下方的数字,当信号快速地传回计算机时,从计算机数据库中就可以直接调出产品的信息

    三、一维码的定义和优缺点

    一维码:(条形码)的数据容量较小(30 个字符左右)、只能包含字母和数字。
    优点:
    1.提高效率 :条码扫描设备能迅速读取商品信息
    2.便于识别 :扫描阅读器扫过条形码标签时,计算机能够自动进行阅读识别,迅速确定商品的代码
    3.加强安全性:有效防止商品盗窃和假冒,从而保护消费者的权益,每个条形码都有唯一对应的数据,增强了防伪能力
    4.采集信息量大:传统的一维条形码每次可以读取几十个字符的信息,而二维条形码的容量更大,能够携带数千个字符的信息
    5.降低成本:作为一种成本较低的标记技术,条形码相较于手写或单独贴纸更为经济实用
    6.管理方便:主要体现在库存和物流管理的信息化与自动化
    7.节省人力:通过“扫一扫,条码追溯等”功能,企业可以快速、准确地获取商品信息,从而进行比质比价。这不仅简化了库存管理,还减少了人工输入错误,进一步提高了工作效率

    缺点:
    1.读取速度慢
    2.易受损坏,尺寸相对较大(空间利用率较低)、遭到损坏后便不能阅读的缺点暴露出来
    3.有限的存储信息(由于条形码的存储能力有限,必须在单个产品上应用多达 10 个条形码,才能正确跟踪和传达信息
    条形码需要从一个方向扫描,因此当扫描仪无法读取各种形状和尺寸的汽车零部件上的条形码时,他们就会遇到生产备份问题)
    4.局限于特定范围内的识别,扫描距离上,不适合远距离,动态应用场景


    四、二维码

    1.二维码的起源

    二维码的发明人是原昌宏,他被称为“二维码之父”。原昌宏于1994年在日本电装公司开发了二维码,主要是为了解决制造业和物流业的产品管理问题。二维码比条形码具有更大的信息量和抗污损性能等。为了使二维码能被广泛应用,原昌宏和日本电装公司决定完全开放二维码的专利,没有收取技术专利费

    2.二维码的定义

    用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形,二维码是一种开放性的信息储存器,能将固定的信息存储在自己的方块之间,可以无限制使用,对识别器也没有任何要求,任何设备只要带扫一扫功能,都可以将他们所储存的信息读取出来。主要有三类分别是线性堆叠式二维码、矩阵式二维码、邮政码

    线性堆叠式二维码
    是在一维条码编码原理的基础上,将多个一维码在纵向堆叠而产生的。典型的码制如:Code16K、Code 49、PDF417等。

    矩阵式二维码
    是在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。典型的码制如:Aztec、Maxi、Code、QRCode、Data、Matrix等。

    邮政码
    通过不同长度的条进行编码,主要用于邮件编码,如:Postnet 、 BPO4-State


    3.常见的二维码

    包括QR CodePDF417Data Matrix汉信码

    QR Code(Quick Response Code):这是一种矩阵二维码符号,具有信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。QR Code码的识读过程所需时间很短,具有超高速识读特点,因此广泛应用于工业自动化生产线管理等领域。

    PDF417:PDF417是一种行排式二维码,由美国Symbol公司发明。它具有较高的容错率,即使部分区域被遮挡也能被正常扫描。

    Data Matrix:这是一种矩阵式二维码,由美国ID Matrix公司发明。Data Matrix码的优点包括信息密度高、识别速度快等。

    汉信码:汉信码是一种由中国物品编码中心开发的二维矩阵码,具有自主知识产权。它适合应用在政府办公、食品安全、质检检察、医疗卫生、移动通讯、公安消防、物流供应链管理等领域。

    3.QR code二维码

    QR全称Quick Response,是一种编码方式。它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
    二维码的基本结构
    整体分为功能区和编码区,功能区主要用于定位,编码区则是真正存储数据的

    二维码版本信息图
    功能图形包括位置探测图形、位置探测分隔符、定位图形、校正图形四大块
    编码区包括格式信息、版本信息、数据和纠错码字三大块

    【位置探测图形】三个就可以标识一个矩形
    【位置探测分隔符】每个探测图形和编码区域之间有一条1单位宽度的分隔符.由白色块组成
    【定位图形】黑白色相间交替组成的一行一列两条位于横纵的两两探测图形之间,用于确定符号的密度和版本,提供决定模块坐标的基准位置

    【校正图形】类似小号的探测图形,中心矩形边框变为1单位,这种校正图形的数量由version来定,大于version 1的都有该校正图形.

    【格式信息】表示该二维码的纠错级别,分为L、M、Q、H;

    【版本信息】即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本 每边增加4个模块。

    【数据和纠错码字】使用黑白的二进制网格编码内容。8个格子可以编码一个字节。数据是我们需要的信息,纠错码字用于修正二维码损坏带来的错误。二维码所有的模块中,储存的并不都是我们需要的信息,甚至只有一小部分才是。在上面的图中,只有数据和纠错码字中的数据才是我们实际想存储的数据

    二维码检测定位

    1. 寻找二维码的三个角的定位角点,需要对图片进行平滑滤波,二值化,寻找轮廓,筛选轮廓中有两个子轮廓的特征,从筛选后的轮廓中找到面积最接近的3个即是二维码的定位角点。

    2. 判断3个角点处于什么位置,主要用来对图片进行透视校正(相机拍到的图片)或者仿射校正(对网站上生成的图片进行缩放拉伸旋转等操作后得到的图片)。需要判断三个角点围成的三角形的最大的角就是二维码左上角的点。然后根据这个角的两个边的角度差确定另外两个角点的左下和右上位置。

    3. 根据这些特征识别二维码的范围。

    二维码识别即译码

    二维码识别即译码

    1.定位并获取符号图像。深色与浅色模块识别为“ 0”与“1”的阵列。
    2.识读格式信息(如果需要,去除掩模图形并完成对格式信息模块的纠错,识别纠错等级与掩模图形参考。)
    3.识读版本信息,确定符号的版本
    4.用掩模图形参考已经从格式信息中得出对编码区的位图进行异或处理消除掩模
    5.根据模块排列规则,识读符号字符,恢复信息的数据与纠错码字
    6.用与纠错级别信息相对应的纠错码字检测错误,如果发现错误,立即纠错
    7.根据模式指示符和字符计数指示符将数据码字划分成多个部分
    8.按照使用的模式译码得出数据字符并输出结果

    里德-所罗门纠错算法
    先要介绍一种纠错方法——极大距离可分法(MDS)。这是一种很常见的纠错方法,它将原始数据分成等长的N份,并根据这N份数据生成M个冗余的校验数据。此时,M+N块数据中任意M块数据损失,也可以通过剩余N块数据经过计算来恢复原始数据。

    数据备份与修复的技术——里德所罗门编码

    简单举例展示下里德所罗门编码

    里德所罗门编码可以随便修改一定量的格子,机器都能自动还原成正确的数据
    为更好的解释这一过程,我们简化成4个格子,格子中的数字是1,2,3,4,任意修改两个格子的数据,算法都可以发现错的是哪一个,并且还原成修改前的数据
    错误位置e1,e2
    错误大小y1,y2


    假设e1 = 3, e2 = 1; y1 = -5, y2 = 1;机器可以自动调整成正确的数据


    在计算这4个未知数之前,还得先让机器知道这串数字错了
    最简单的方法就是算0,算出了0就是对的,不是0就是错的

    比如,我们的设备可以保存一个固定值g=1234,输入数值m(1234) 减去 固定值g(1234),就刚好等于0

    若输入值为5678,结果就不是0,这时需要根据输入值和固定值反推出一个P,无论想输入什么,都能算出0,这个P是纠错码
    若固定值g = 100, 输入值为5678,那么纠错码P就可以是-5578


    若输入变成1234,P就会跟着变成-1134

    若输入值被改成6234,纠错码不变,结果就不是0,机器就知道输入错了


    纠错码P和输入值m 都会出现在二维码上

    新问题:纠错码被修改了,怎么办?
    还需要进一步研究,若m + p -100 不等于0,我们不知道m 和 p哪个错了?

    思考:把m 和 p 组合成一个数字,比如1234xxxx?
    用加减法,也不可能等于0,用除法试一下

    新问题:1. 3的倍数很多,很多错误情况一样可以得到0;2. 即使得到一个余数,也无法知道哪一位数错了多少?

    这时需要改变计算规则了,该伽罗瓦域上场了!!!
    伽罗瓦域是一种有限数域,其值范围为[0, 2^8-1],即0~255
    伽罗瓦域,是一个封闭的世界,里面的数不管怎么算,都不会得到他们之外的结果

    伽罗瓦域中的加法和减法都是一样的,都是异或算法


    可见,不管怎么加减,都只能得到域里的数字,完整运算结果表格如下



    乘除法:6*7



    完整乘除法运算结果表如下

    回到上面的除法,若我们用伽罗瓦域的规则,就不能用12340000了

    这时,需要用到多项式
    在多项式中,我们把每个格子里的数字作为x的系数,个字的位数作为x的次方数

    12340000的多项式,如下图


    既然输入数据变成了多项式,我们要除以的固定值g也应该是一个有x的多项式,即g(x)
    我们要得到的4位纠错码g(x)就有4个因子


    用m(x)除以g(x),得到4位余数p(x)


    把多项式系数换成数字,就是1674

    把原来的m(x) 和余数p(x)相加,得到的新多项式刚好被整除


    这个过程用公式描述就是这样:




    这样,我们得到了最终的输入数据,和用多项式表示如下图



    随便修改8个格子中任意2个,机器可以完成自动修正
    首先,系统会把收到的输入数据变成多项式

    现在需要找到错误位置e1,e2,错误大小y1,y2,这一切的关键在于四个隐藏的方程组
    我们知道正确的数据M(x)/g(x) = 0,那么M(x)等于g(x)乘以一个固定值h(x)


    虽然我们不知道正确情况下,m1,m2,m3,m4,p1,p2,p3,p4是多少,但我们知道错误情况下,把我们收到的输入数据62241674带入这4个方程计算,能得到4个不等于0的结果


    而这4个方程之所以不等于0,是因为有2个地方出错,错误位置e1, e2, 出错大小y1,y2,乘以2的n次方后相加是方程的结果;而2的n次方又和出错数字的位置有关




    把位置5和7处的错误数字2和6,分别和错误大小1,7做异或运算,得到3和1,那么正确输入数据如下图


    我们把信息编码成二进制,按顺序填上原始数据,再填上计算后的纠错码和其他信息,再和掩码做一次异或运算,生成最终的二维码。


    生成二维码

    二维码能表示多少数据?
    数据容量取决于 编码方式 + 纠错级别 + 二维码版本,下图为简单示例,即选择 纯数字编码 + 纠错级别为M + 二维码版本为3时,二维码字符容量为101

    二维码文本数据格式
    二维码的识别结果主要是文本,而根据文本格式的不同,扫描器(例如微信,支付宝)又会做出不同的反应(例如打开浏览器,打开通讯录等),常见文本类型有如下

    4.二维码的生成原理和工作原理

    生成原理
    用特定的几何图形,按编排规律,在二维方向上分布,采用黑白相间的图形,记录数据符号信息,用数字0,1为代码,与二进制相对应的几何形体,表示文字数值信息

    二维码生成流程主要分为四步,首先我们将所需要展示的数据进行数据编码,其次对于数据编码后的数据码利用里德-所罗门算法计算其纠错码,然后将数据码和纠错码合并到一起形成的就是最终编码,最后利用二维码结构进行画二维码流程

    工作原理
    通过常见的输入设备或光电扫描设备自动读取并且会对识别出的信息进行自动处理,因为每个码只有自己的字符级,一个个点字符占据自己的位置,通过扫描能读取的数据
    信息在二维码中的位置是由定位图形和分隔符决定的,才能快速识别和处理图形旋转变化等问题

    如何获取当前连接wifi密码并通过二维码分享wifi
    1.打开“设置”
    2.点击“无线网络”
    3.点击已连接的Wi-Fi
    4.点击“分享网络”
    5.保存图片
    6.在微信中识别图片二维码,可见wifi 账号密码

    参考文献链接:
    关于二维码的一些必备知识点
    为程序员写的Reed-Solomon码解释
    MDS算法
    里德—所罗门(Reed-Solomon)纠错算法笔记
    QR码的信息量和版本

    学习视频:二维码解析

    相关文章

      网友评论

          本文标题:浅谈“码”

          本文链接:https://www.haomeiwen.com/subject/xptrcjtx.html