03.02 二维码的原理是什么?

随小刘


二维码的原理可以分为生成原理和工作原理。

首先是生成原理:

该原理是,用特定的几何图形按编排规律在二维方向上分布,采用黑白相见的图形来记录数据符号信息。

为了利用计算机内部逻辑,用数字“0”和数字“1”作为代码,同时使用若干个与二进制相对应的几何形体表示文字数值信息。

这里面我有几个小知识点想提一提。

知识点一:二维码共有40个尺寸

也就是版本version,Version 1.0是21 x 21的正方形,Version 2.0是 25 x 25的(公式:(V-1)*4 + 21)。所以最大的尺寸就是177 x 177 的正方形。


知识点二:三个点确定一个面

二维码只有三个角上有位置探测图案,就是这个就是为了更好的读取二维码。那有人问为什么不是四个能,这个角也不是多余的,可以镶嵌别的信息。

知识点三:旋转二维码,也可以识别

因为有知识点二中所说的位置探测图案和分隔符,所以,无论是正着扫码,还是竖着扫码,或者斜着扫码,信息都可以被识别。

再来看看,二维码的工作原理:

通过常见的图象输入设备或光电扫描设备,它们可以自动读取,并且会对识别出的信息进行自动处理。

因为每个码制有自己的字符集,一个一个的字符占据自己的位置。所以,通过扫描能读取的数据信息在二维码中的位置是由定位图形和分隔符决定的。才能够快速地识别和处理图形旋转、变化等问题。

这里同样有几个有趣的小知识点。

首先,二维码不但只有黑白色的,普遍使用黑白色是为了提高其工作效率。

其次,二维码最早源于日本,但在我国被发扬光大。



镁客网


二维码是在一维码的基础上发展而来的,最常见的一维码就是超市商品的条形码,它将每种商品进行编号,用粗细不同的黑条相互组合来组成独一无二的商品指纹,但是一维码只能在同一个方向上进行编码,各种组合的数量有限,因此才产生了二维码。


二维码可以在水平和竖直方向上进行编码,用正方形的黑白格来记录信息,原理是利用了二进制的0和1,打个比方,现在有一个10乘10格子的二维码,每一行都有黑白格,如果用1表示白色的格子,0表示黑色的格子,那么我们可以用类似“0100101100”这样的一行数字来表示每一行的代码,那么将10个这样的数字行排列起来,就组成了一个二维码,我们扫码就相当于解码的过程,可以识别二维码上的信息。二维码还具有容错性,一些二维码只需要扫前面几行就可以识别出信息,哪怕二维码局部破损丢失都可能识别信息,不需要扫全,它比普通条形码译码错误率50万分之1还要低,误码率低于1000万分之1。


科学薛定谔的猫


  1. 二维码为什么是黑白相间的?黑色表示二进制的“1”,白色表示二进制的“0”

    “我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中。”黄海平说,“制作二维码输入的信息可以分成三类,文本信息,比如名片信息;字符信息,比如网址、电话号码;还有图片信息,甚至还可以包括简短的视频。”数据信息是怎么被编入的呢?信息输入后,首先要选择一种信息编码的码制。现在常见的二维码都是以QR码作为编码的码制。QR码是矩阵式二维码,它是在一个矩形空间内,通过黑、白像素在矩阵中的不同分布,来进行编码的。我们知道电脑使用二进制(0和1)数来贮存和处理数据,而在二维码中,用黑白矩形表示二进制数据我们肉眼能看到的黑色表示的是二进制“1”,白色表示二进制的“0”,黑白的排列组合确定了矩阵式二维条码的内容,以便于计算机对二维码符号进行编码和分析。

  2. 2

    QR CODE 介绍:QR(Quick-Response)\n \ncode是被广泛使用的一种二维码,解码速度快。它可以存储多用类型。如下图时一个qrcode的基本结构,其中:位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;校正图形:规格确定,校正图形的数量和位置也就确定了;格式信息:表示改二维码的纠错级别,分为L、M、Q、H;版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21x21(版本1),到177x177(版本40),每一版本符号比前一版本\n 每边增加4个模块。数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。

  3. 3

    简要的编码过程:数据分析:确定编码的字符类型,按相应的字符集转换成符号字符;\n \n选择纠错等级,在规格一定的条件下,纠错等级越高其真实数据的容量越小。数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。其实知道这个数据码字序列就知道了二维码的数据内容。

    数据可以按照一种模式进行编码,以便进行更高效的解码,例如:对数据:01234567编码(版本1-H),1)分组:012\n 345 672)转成二进制:012→0000001100 345→0101011001 \n 67 →10000113)转成序列:0000001100 0101011001 10000114)字符数 \n转成二进制:8→00000010005)加入模式指示符(上图数字)0001:0001 0000001000 0000001100 \n0101011001 1000011对于字母、中文、日文等只是分组的方式、模式等内容有所区别。基本方法是一致的

  4. 4

    纠错编码:按需要将上面的码字序列分块,并根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。在二维码规格和纠错等级确定的情况下,其实它所能容纳的码字总数和纠错码字数也就确定了,比如:版本10,纠错等级时H时,总共能容纳346个码字,其中224个纠错码字。就是说二维码区域中大约1/3的码字时冗余的。对于这224个纠错码字,它能够纠正112个替代错误(如黑白颠倒)或者224个据读错误(无法读到或者无法译码),这样纠错容量为:112/346=32.4%

  5. 5

    构造最终数据信息:在规格确定的条件下,将上面产生的序列按次序放如分块中,按规定把数据分块,然后对每一块进行计算,得出相应的纠错码字区块,把纠错码字区块\n 按顺序构成一个序列,添加到原先的数据码字序列后面。如:D1, D12, D23, D35, D2, D13, D24, D36, ... \nD11, D22, D33, D45, D34, D46, E1, E23,E45, E67, E2, E24, E46, \nE68,...构造矩阵:将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。

  6. 6

    掩摸:将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。 一个算法,不研究了,有兴趣的同学可以继续。格式和版本信息:生成格式和版本信息放入相应区域内。版本7-40都包含了版本信息,没有版本信息的全为0。二维码上两个位置包含了版本信息,它们是冗余的。版本信息共18位,6X3的矩阵,其中6位时数据为,如版本号8,数据位的信息时\n \n001000,后面的12位是纠错位。至此,二维码的编码流程基本完成了,下面就来实践一下吧,当然不用自己再去编写上面的算法了,使用三方包zxing\n 就可以了编码:public static void encode(String content, String format, String \nfilePath) {try {Hashtable hints = new \nHashtable();//设置编码类型hints.put(EncodeHintType.CHARACTER_SET, \nDEFAULT_ENCODING);//编码BitMatrix bitMatrix = new \nQRCodeWriter().encode(content,BarcodeFormat.QR_CODE, \nDEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT,hints);//输出到文件,也可以输出到流File file\n = new File(filePath);MatrixToImageWriter.writeToFile(bitMatrix, format,\n file);} catch (IOException e) {e.printStackTrace();} catch \n(WriterException e1) {e1.printStackTrace();}}解码: BufferedImage image =\n ImageIO.read(file);//读取文件LuminanceSource source = new \nBufferedImageLuminanceSource(image);BinaryBitmap bitmap = new \nBinaryBitmap(new HybridBinarizer(source)); //解码Result result = new \nMultiFormatReader().decode(bitmap);String resultStr = result.getText(); \n System.out.println(resultStr);


Yqcker


来来来,我来用大白话解释一下二维码的原理,如果有认识不对的地方,请大家留言指正。


二级制

解释二维码之前,要知道二进制是什么。

十进制我们都非常熟悉,就是逢十进位;二进制也就好理解了,数到1后面是2,【逢二进位】。

为什么计算机要使用二级制呢?因为二级制里面只有0和1,可以两个不同的状态表示,对于计算机硬件实现很简单;比如灯泡亮了就是1,灯泡灭了就是0。


大部分的字符的都可以转换成二进制码,比如我们常听到的ASCII码,字母A的ASCII码值得二进制表示是01000000,汉字也一样,不过汉字会比较麻烦一些,而且也要看字符集。


二维码

二维码,实质上就是把信息(数据)转成二进制码,在把二级制码填充到二维码这个大方块中。

二维码实际上是由很多个小方块组成的,黑色表示1,白色表示0。


当然,这只是最简单的理解,真正的原理还是很复杂的,也简单的说几句。

  • 我们常用的矩阵式二维码,都是QRCODE,可以把这个看做是个(最流行的)标准,算法是公开的,也有各种现成的库,就算不会代码,也有各种生成工具。

  • 二维码上,实际上是被划分了几个区,每个区都有自己的作用。比如有三个角上有三个大黑方块,这是用作位置探测用的,所以我们扫描从哪个方向扫,都可以扫出来。

  • QRCODE也是有版本的,最初是21*21,版本40的时候已经到了177*177了,格子多,里面存的信息量也就会越大。

  • 如果是汉字的话,QRCODE40可以存储大概1800个汉字。

  • 现在有很多设计,都会让人忍不住想点击一下(为了此答案能审核通过,中间的二维码已经手动打码...)。


我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


二维码的原理说简单也简单,就是把编码的内容,用二维图像的形式显示出来;但说难也难,难在如何让手机方便识别,如何即使有了污损也能还原。

前者的原理:把编码的内容,用二维图像的形式显示出来。其实我们已经做了几千年了,绘画、书写,都是这样的原理。所以没有什么稀奇的。二维码最有意思的是他的困难之处。

(二维码,不过扫不出来,因为少了一个定位点)

我们用手机扫描二维码的时候,可不一定是正对着的。我们知道,根据透视的原理,我们拍到的东西基本上不是真正的正方形。这个时候,程序就要能还原回去。二维码四周的三个大黑块和一个中型黑块,就是辅助手机定位的。知道了这几个点的位置,我们就能把二维码还原成正方形。

还原成正方形之后,程序再将其中的0-1数据(黑白)识别出来,然后再解码,就能获得二维码的内容了。

二维码还需要能够承受一定的污损,这样即便有一点瑕疵,也不妨碍我们使用。这就要求在编码中要有一定的冗余。比如把数据重复很多遍,这样损坏一部分,仍然能知道全部的数据。


章彦博


什么是二维码?它是如何工作的?

互联网的时尚总是来来去去,但二维码(QR)却一直顽固地坚持着,尽管人们一再错误地预测二维码即将消亡。

那么什么是二维码?为什么它很重要?

如果你以前从未听说过这个词,你现在可能会挠头。更懂互联网的人可能已经知道,但对于那些不懂的人来说,二维码是什么样子的:

乍一看可能有点奇怪,这段代码是小企业主和企业家需要知道的,因为它正日益成为一个重要的工具。二维码基本上是传统条码的自然延伸。从上世纪70年代中期开始,从超市杂货到大型集装箱运输,所有商品都可以使用二维码。它是1994年为日本汽车制造商设计的,用于跟踪汽车零部件。现在它被大公司和小公司使用。

二维码的识别原理:维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

二维码对您企业的优势

不过,二维码相对于传统的条形码有很多优势。其主要优势在于,二维码上的信息存储量是传统水平条码的100倍。此外,二维码可以从任何方向360度扫描。这使得你的设备更容易阅读,减少了背景干扰的可能性。

第三个主要优势是,从市场营销的角度来看,代码的外观是独特和有趣的,增加了让客户参与可能部署代码的活动的可能性。

任何人都可以在智能手机上下载二维码阅读器,而且它们大多是免费的。这意味着任何客户都可以用他或她的智能手机走进你的企业,扫描你生成的二维码。安卓用户可以使用二维码阅读器,iPhone用户可以下载快速扫描应用程序。

有很多网站允许你生成二维码,而且大多数都是免费的。然后你可以把它们下载到你的电脑上打印。在谷歌中搜索“二维码生成器”会得到无数的结果,每个结果都提供了不同的选项。因此,这只是一个选择最适合你的选项的例子。

可能的二维码申请

现在,让我们来看看一些与商业相关的场景,你会使用二维码。

使用二维码将客户导向你的网站、Facebook、Twitter或其他社交媒体页面的URL。

用它来分享一条短信(从“节日快乐!”(“你看到我们楼上的东西了吗?”)

例如,把它作为折扣码带到收银台打九折。

在您的名片上使用它,并将您的联系方式嵌入代码中。

可以使用它链接到谷歌映射的新存储位置。

用它链接到YouTube视频或频道,展示新产品或搞笑公司视频。

使用它链接到应用商店下载(可能是你公司最新的电子商务应用?)

使用它嵌入价格为您的产品作为一个更传统的价格标签的选择。

把它放在你的网站的“联系我们”页面,让人们扫描它,直接从他们的手机上得到你的联系信息。

把这些代码贴在你餐厅的桌子和墙上,这样顾客就可以很容易地发送Foursquare或Facebook状态更新信息。

在你餐厅的外卖菜单上写一个代码,让顾客用手机扫描菜单,然后立即打电话下订单。

在将观众带到网站登陆页面的宣传视频末尾放上二维码。

希望你现在可以看到二维码在你的业务中使用的好处。这些代码可以帮助您存储大量信息,并提供一种创造性的吸引客户的新方式。鼓励他们拿出手机开始扫描。提供优惠的激励,只有客户可以通过代码。

不是每个人都相信二维码的价值

当然,仍然有一些营销专家认为二维码完全错过了机会。市场策略师安尼丝•史密斯(Anise Smith)认为,QR码的时代是五年前的事了,与今天相比,当时智能手机的普及程度较低,严重阻碍了QR码被认真采用的可能性。

史密斯在接受《小企业趋势》(Small Business Trends)采访时表示:“我们目前正处于二维码取得成功所需要的技术已经就位。”不幸的是,当二维码开始流行时,这些元素并没有到位。如果二维码已经到位,它将改变游戏规则。现在二维码的时代已经过去了,因为现在有了像增强现实这样的技术,它提供了比二维码更好的技术能力。

不过,如果你环顾四周,你会发现二维码无处不在。不过,正如GigaOM所指出的,并不是所有的二维码应用都充分利用了这项技术。

例如,该网站提到了无法扫描的公交车后座上的二维码,或者连接到不适合移动设备的网站的二维码。

到目前为止,二维码营销策略的缺乏可能阻碍了这项技术在商界的广泛应用。但这并不意味着二维码作为小企业的工具已经过时。考虑一下以上二维码的申请。在吸引客户和促进销售时,创造性地使用这项技术仍可能给你带来意想不到的优势。


开眼科学


二维码其实是从条形码转化而来,条形码又称一维码。

二维码与之比起来能够涵盖的内容丰富,领域广。由于他的便利,方便,还有安全性,很适合现在我们的生活。

二维码刚开始诞生于日本,但是被我们国家发扬光大,当然这跟我们的消费方式有很大的联系。在2016年,停了两年之久的支付宝支付又再次进入我们的日常生活中,并且一发不可收拾。

二维码的原理是什么呢?

就是用特定的几何图形在平面上记录符号信息。了解过计算机的应该都有所了解计算机内部的二进制处理信息的方式,0和1,我们称之为比特流。而利用电脑编码的二维码,就是由二进制进化而来。

我们用几何图形来代表数字0或1,比如说二进制中010001011代表的是信息,从数字表面看来看不出什么,但是放到电脑上进行解码就可以了解到他代表的含义。二维码就是这样,只不过把0或1变成了一个一个的小图形。

反过来看:二维码就是使用二进制相对应的几何图形来表示数值信息,通过扫描设备将几何图形转化为二进制的语言,再经过转化就可以显示出二维码所蕴涵的内容。这也是为什么二维码经过扫描之后产生数据的原因。


欧界科技


安静区域:空白边框,可以将代码与其他打印信息隔离(例如,在脏信封上,报纸的黑白打印或污迹产品包装上)。

Finder模式:三个角落中的大黑色和白色方块可以很容易地确认这是一个QR码(而不是,例如,Aztec代码)。由于它们只有三个,所以很明显代码的哪个方向以及它指向的角度(除非代码在某种程度上被部分遮挡或损坏)。

对齐模式:这确保代码可以被破译,即使它是扭曲的(以某个角度查看,打印在曲面上,等等)。

定时模式:在三个取景器模式之间水平和垂直地运行,由交替的黑色和白色方块组成。时序模式可以轻松识别QR码中的各个数据单元,在代码损坏或失真时尤其有用。

版本信息:QR码标准有各种不同版本;版本信息(位于两个取景器模式附近)简单地识别在特定代码中使用哪一个。

数据单元:每个单独的黑色或白色方块不属于标准特征之一(时序,对齐和其他模式),包含代码中的一些实际数据。


我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的头条号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。


我是沐叔


二维码在我们的生活中已经越来越不可代替,买个早点付个款,甚至追上喜欢的妹子要个微信,也都是展示出二维码自己来扫一扫。但是这个天天见着的小黑白块,为什么就能让你输出金钱,勾搭妹子呢 ?

二维码是一维码的扩展。 在超市购物时,最终的清算,基本上都是柜员扫一遍所有物品的条码然后得出总价。这个条码就是一维条码,将黑色条纹和空白间隙按照一定的规则排列,做成一个平行线图案,就能表达一组相对简单的数字符号信息。

一维条码只在排列黑白条纹的一个方向上记录数据,而二维码则将另一个方向扩展使用上,使其在另一个垂直方向上也记载数据 。虽然形式上有排列式,矩阵式等不同的形式,但是底层代码编码编制上都还是基础的0,1逻辑,使用与二进制相关的图形表达文字数字信息,扫描设备识别图形并在相应特定的字符集中取出对应的数据字符实现自动处理。 并且二维码在一维码的基础上,增设了“定位点”以及“容错机制”,记载数据量更多,能准确传递如图片链接,网络链接等数据。

定位点是二维条码的一个特殊的定位标记。通常的二维码我们都能看到三个角是一样的黑白包容的方块,但是另一个角则不一样,因为三个点就能表示限定出一个矩形的范围,并能让识别设备从正确的方向来识别它,所以二维码不管是从哪个方向上都能识别出来的。

二维码编码生成过程本身是将数据信息转换为图形的过程,读取也就是从图形中读取数据信息。二维码容错性是通过在二维码生成时进行冗余设定,我们将要存入的数据,进行冗余运算在二维码中存入多条相同的数据。经过这个冗余运算的步骤后,生成出来的二维码在有部分破损或者遮挡的情况下仍可识别。如常见的二维码为 QR 码,QR 码的容错率从低到高就有 L,M,Q,H 四个容错等级,等级越高容错性越好,相同破坏比例下被识别的概率越大。而平常使用一般的二维码生成软件也能达到 30%的高容错率,有一点破损污点来识别也是基本OK的。


stormzhang


随着科技的发展,整个世界已经充满了二维码。看网页需要扫码、加好友要扫码,就连楼下卖菜的大爷都支持扫码支付了。今天,笔者就用通俗易懂地给您介绍一下二维码到底是什么原理呢?

说到二维码,我们就不得不提到二维码的哥哥——条形码,也就是超市收银员结账时扫的那个黑白条。相信看过《天才枪手》的看官们都知道,每条条形码的粗细程度都不一样,经过扫描后,扫描仪就能把二维码转化成数字信息。这些数字信息放到电脑上,就只能找到条形码所对应的商品。


相比起只能在一个水平维度上携带相信的条形码,二维码可以在水平和垂直两个维度上携带信息,这样所能携带的信息量就大大增加了。

说到这里,相信很多看官们都猜到了,二维码就是把信息翻译成黑白小方块,然后把它们填到大方块里。等我们扫码时,黑白小方块又转化成我们要的信息。这就类似于我们考试中所用到的答题卡,也是把我们要的答案转化成机器可扫描的图案,所以机器能在一秒钟之内知道你得了多少分。

如果你要问,为什么所有二维码都有三个方块,其实这三个一模一样的方块,是用来给手机相机定位的。所以我们从哪个方向扫,扫出来的结果都是一样的。

总而言之,条形码和二维码这一对好兄弟,说白了就是给数字、字母和符号换了一身衣服,把它们打扮成了能被手机相机识别的黑白条或块。


分享到:


相關文章: