二维码_二维码生成 - CSDN
二维码 订阅
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 [1]  2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [2] 展开全文
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的、黑白相间的、记录数据符号信息的图形;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。 [1]  2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [2]
信息
主要特点
信息量大、易识别、成本低等
外文名
Quick Response Code
别    称
二维条码
拼    音
èr wéi mǎ
作    用
记载信息
中文名
二维码
常见类型
堆叠式二维码、矩阵式二维码
常见营销方式
扫码支付、营销、电商平台
应用范围
商业活动、网络链接、信息读取
二维码发展历程
国外对二维码技术的研究始于20世纪80年代末,在二维码符号表示技术研究方面已研制出多种码制,常见的有PDF417、QR Code、Code 49、Code 16K、Code One等。这些二维码的信息密度都比传统的一维码有了较大提高,如PDF417的信息密度是一维码CodeC39的20多倍。在二维码标准化研究方面,国际自动识别制造商协会(AIM)、美国标准化协会(ANSI)已完成了PDF417、QR Code、Code 49、Code 16K、Code One等码制的符号标准。国际标准技术委员会和国际电工委员会还成立了条码自动识别技术委员会(ISO/IEC/JTC1/SC31),已制定了QR Code的国际标准(ISO/IEC 18004:2000《自动识别与数据采集技术—条码符号技术规范—QR码》),起草了PDF417、Code 16K、Data Matrix、Maxi Code等二维码的ISO/IEC标准草案。在二维码设备开发研制、生产方面,美国、日本等国的设备制造商生产的识读设备、符号生成设备,已广泛应用于各类二维码应用系统。二维码作为一种全新的信息存储、传递和识别技术,自诞生之日起就得到了世界上许多国家的关注。美国、德国、日本等国家,不仅已将二维码技术应用于公安、外交、军事等部门对各类证件的管理,而且也将二维码应用于海关、税务等部门对各类报表和票据的管理,商业、交通运输等部门对商品及货物运输的管理、邮政部门对邮政包裹的管理、工业生产领域对工业生产线的自动化管理。中国对二维码技术的研究开始于1993年。中国物品编码中心对几种常用的二维码PDF417、QRCCode、Data Matrix、Maxi Code、Code 49、Code 16K、Code One的技术规范进行了翻译和跟踪研究。随着中国市场经济的不断完善和信息技术的迅速发展,国内对二维码这一新技术的需求与日俱增。中国物品编码中心在原国家质量技术监督局和国家有关部门的大力支持下,对二维码技术的研究不断深入。在消化国外相关技术资料的基础上,制定了两个二维码的国家标准:二维码网格矩阵码(SJ/T 11349-2006)和二维码紧密矩阵码(SJ/T 11350-2006),从而大大促进了中国具有自主知识产权技术的二维码的研发。2016年8月3日,支付清算协会向支付机构下发《条码支付业务规范》(征求意见稿),意见稿中明确指出支付机构开展条码业务需要遵循的安全标准。这是央行在2014年叫停二维码支付以后首次官方承认二维码支付地位。 [3] 
收起全文
精华内容
参与话题
  • 二维码的生成细节和原理

    万次阅读 多人点赞 2016-03-09 23:10:39
    二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了...

    二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。

    关于QR Code Specification,可参看这个PDF:http://raidenii.net/files/datasheets/misc/qr_code.pdf 

    基础知识

    首先,我们先说一下二维码一共有40个尺寸。官方叫版本Version。Version 1是21 x 21的矩阵,Version 2是 25 x 25的矩阵,Version 3是29的尺寸,每增加一个version,就会增加4的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。

    下面我们看看一个二维码的样例:

    定位图案
    • Position Detection Pattern是定位图案,用于标记二维码的矩形大小。这三个定位图案有白边叫Separators for Postion Detection Patterns。之所以三个而不是四个意思就是三个就可以标识一个矩形了。
    • Timing Patterns也是用于定位的。原因是二维码有40种尺寸,尺寸过大了后需要有根标准线,不然扫描的时候可能会扫歪了。
    • Alignment Patterns 只有Version 2以上(包括Version2)的二维码需要这个东东,同样是为了定位用的。
    功能性数据
    • Format Information 存在于所有的尺寸中,用于存放一些格式化数据的。
    • Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
    数据码和纠错码
    • 除了上述的那些地方,剩下的地方存放 Data Code 数据码 和 Error Correction Code 纠错码。

    数据编码

    我们先来说说数据编码。QR码支持如下的编码:

    Numeric mode 数字编码,从0到9。如果需要编码的数字的个数不是3的倍数,那么,最后剩下的1或2位数会被转成4或7bits,则其它的每3位数字会被编成 10,12,14bits,编成多长还要看二维码的尺寸(下面有一个表Table 3说明了这点)

    Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。如下所示:(其中的SP是空格,Char是字符,Value是其索引值) 编码的过程是把字符两两分组,然后转成下表的45进制,然后转成11bits的二进制,如果最后有一个落单的,那就转成6bits的二进制。而编码模式和字符的个数需要根据不同的Version尺寸编成9, 11或13个二进制(如下表中Table 3)

    Byte mode, 字节编码,可以是0-255的ISO-8859-1字符。有些二维码的扫描器可以自动检测是否是UTF-8的编码。

    Kanji mode 这是日文编码,也是双字节编码。同样,也可以用于中文编码。日文和汉字的编码会减去一个值。如:在0X8140 to 0X9FFC中的字符会减去8140,在0XE040到0XEBBF中的字符要减去0XC140,然后把结果前两个16进制位拿出来乘以0XC0,然后再加上后两个16进制位,最后转成13bit的编码。如下图示例:

    Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。

    Structured Append mode 用于混合编码,也就是说,这个二维码中包含了多种编码格式。

    FNC1 mode 这种编码方式主要是给一些特殊的工业或行业用的。比如GS1条形码之类的。

    简单起见,后面三种不会在本文 中讨论。

    下面两张表中,

    • Table 2 是各个编码格式的“编号”,这个东西要写在Format Information中。注:中文是1101
    • Table 3 表示了,不同版本(尺寸)的二维码,对于,数字,字符,字节和Kanji模式下,对于单个编码的2进制的位数。(在二维码的规格说明书中,有各种各样的编码规范表,后面还会提到)

    下面我们看几个示例,

    示例一:数字编码

    在Version 1的尺寸下,纠错级别为H的情况下,编码: 01234567

    1. 把上述数字分成三组: 012 345 67

    2. 把他们转成二进制:  012 转成 0000001100;  345 转成 0101011001;  67 转成 1000011。

    3. 把这三个二进制串起来: 0000001100 0101011001 1000011

    4. 把数字的个数转成二进制 (version 1-H是10 bits ): 8个数字的二进制是 0000001000

    5. 把数字编码的标志0001和第4步的编码加到前面:  0001 0000001000 0000001100 0101011001 1000011

    示例二:字符编码

    在Version 1的尺寸下,纠错级别为H的情况下,编码: AC-42

    1. 从字符索引表中找到 AC-42 这五个字条的索引 (10,12,41,4,2)

    2. 两两分组: (10,12) (41,4) (2)

    3.把每一组转成11bits的二进制:

    (10,12) 10*45+12 等于 462 转成 00111001110
    (41,4) 41*45+4 等于 1849 转成 11100111001
    (2) 等于 2 转成 000010

    4. 把这些二进制连接起来:00111001110 11100111001 000010

    5. 把字符的个数转成二进制 (Version 1-H为9 bits ): 5个字符,5转成 000000101

    6. 在头上加上编码标识 0010 和第5步的个数编码:  0010 000000101 00111001110 11100111001 000010

    结束符和补齐符

    假如我们有个HELLO WORLD的字符串要编码,根据上面的示例二,我们可以得到下面的编码,

    编码 字符数 HELLO WORLD的编码
    0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101

    我们还要加上结束符:

    编码 字符数 HELLO WORLD的编码 结束
    0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 0000
    按8bits重排

    如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有78个bits,所以,我们还要加上2个0,然后按8个bits分好组:

    00100000   01011011   00001011   01111000   11010001   01110010   11011100   01001101   01000011   01000000

    补齐码(Padding Bytes)

    最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001 (这两个二进制转成十进制是236和17,我也不知道为什么,只知道Spec上是这么写的)关于每一个Version的每一种纠错级别的最大Bits限制,可以参看QR Code Spec的第28页到32页的Table-7一表。

    假设我们需要编码的是Version 1的Q纠错级,那么,其最大需要104个bits,而我们上面只有80个bits,所以,还需要补24个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:

    00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100

    上面的编码就是数据码了,叫Data Codewords,每一个8bits叫一个codeword,我们还要对这些数据码加上纠错信息。

    纠错码

    上面我们说到了一些纠错级别,Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。

    错误修正容量
    L水平 7%的字码可被修正
    M水平 15%的字码可被修正
    Q水平 25%的字码可被修正
    H水平 30%的字码可被修正

    那么,QR是怎么对数据码加上纠错码的?首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第33页到44页的Table-13到Table-22的定义表。注意最后两列:

    • Number of Error Code Correction Blocks :需要分多少个块。
    • Error Correction Code Per Blocks:每一个块中的code个数,所谓的code的个数,也就是有多少个8bits的字节。

    举个例子:上述的Version 5 + Q纠错级:需要4个Blocks(2个Blocks为一组,共两组),头一组的两个Blocks中各15个bits数据 + 各 9个bits的纠错码(注:表中的codewords就是一个8bits的byte)(再注:最后一例中的(c, k, r )的公式为:c = k + 2 * r,因为后脚注解释了:纠错码的容量小于纠错码的一半)

    下图给一个5-Q的示例(因为二进制写起来会让表格太大,所以,我都用了十进制,我们可以看到每一块的纠错码有18个codewords,也就是18个8bits的二进制数)

    数据 对每个块的纠错码
    1 1 67 85 70 134 87 38 85 194 119 50 6 18 6 103 38 213 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39
    2 246 246 66 7 118 134 242 7 38 86 22 198 199 146 6 87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 133
    2 1 182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7 148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141
    2 70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236 235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 236

    注:二维码的纠错码主要是通过Reed-Solomon error correction(里德-所罗门纠错算法)来实现的。对于这个算法,对于我来说是相当的复杂,里面有很多的数学计算,比如:多项式除法,把1-255的数映射成2的n次方(0<=n<=255)的伽罗瓦域Galois Field之类的神一样的东西,以及基于这些基础的纠错数学公式,因为我的数据基础差,对于我来说太过复杂,所以我一时半会儿还有点没搞明白,还在学习中,所以,我在这里就不展开说这些东西了。还请大家见谅了。(当然,如果有朋友很明白,也繁请教教我)

    最终编码

    穿插放置

    如果你以为我们可以开始画图,你就错了。二维码的混乱技术还没有玩完,它还要把数据码和纠错码的各个codewords交替放在一起。如何交替呢,规则如下:

    对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。如:上述示例中的Data Codewords如下:

    块 1 67 85 70 134 87 38 85 194 119 50 6 18 6 103 38  
    块 2 246 246 66 7 118 134 242 7 38 86 22 198 199 146 6  
    块 3 182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7
    块 4 70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236

    我们先取第一列的:67, 246, 182, 70

    然后再取第二列的:67, 246, 182, 70, 85,246,230 ,247

    如此类推:67, 246, 182, 70, 85,246,230 ,247 ………  ……… ,38,6,50,17,7,236

    对于纠错码,也是一样:

    块 1 213 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39
    块 2 87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 133
    块 3 148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141
    块 4 235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 236

    和数据码取的一样,得到:213,87,148,235,199,204,116,159,…… …… 39,133,141,236

    然后,再把这两组放在一起(纠错码放在数据码之后)得到:

    67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236

    这就是我们的数据区。

    Remainder Bits

    最后再加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:上述的5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看QR Code Spec的第15页的Table-1的定义表。

    画二维码图

    Position Detection Pattern

    首先,先把Position Detection图案画在三个角上。(无论Version如何,这个图案的尺寸就是这么大)

    Alignment Pattern

    然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)

    关于Alignment的位置,可以查看QR Code Spec的第81页的Table-E.1的定义表(下表是不完全表格)

    下图是根据上述表格中的Version8的一个例子(6,24,42)

    Timing Pattern

    接下来是Timing Pattern的线(这个不用多说了)

    Format Information

    再接下来是Formation Information,下图中的蓝色部分。

    Format Information是一个15个bits的信息,每一个bit的位置如下图所示:(注意图中的Dark Module,那是永远出现的)

    这15个bits中包括:

    • 5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask
    • 10个纠错bits。主要通过BCH Code来计算

    然后15个bits还要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。

    下面是一个示例:

    关于Error Correction Level如下表所示:

    关于Mask图案如后面的Table 23所示。

    Version Information

    再接下来是Version Information(版本7以后需要这个编码),下图中的蓝色部分。

    Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码,下面是一个示例:

    而其填充位置如下:

    数据和数据纠错码

    然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。

    掩码图案

    这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作(靠,还嫌不复杂)QR的Spec中说了,QR有8个Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。(注:选择一个合适的Mask也是有算法的

    其Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y)

    下面是Mask后的一些样子,我们可以看到被某些Mask XOR了的数据变得比较零散了。

    Mask过后的二维码就成最终的图了。

    好了,大家可以去尝试去写一下QR的编码程序,当然,你可以用网上找个Reed Soloman的纠错算法的库,或是看看别人的源代码是怎么实现这个繁锁的编码。

    (全文完)

    展开全文
  • 条形码、二维码扫描、生成Demo 完整源码

    万次下载 热门讨论 2020-07-30 23:30:42
    使用Google ZXing开源项目制作的条形码、二维码的生成、扫描Demo
  • 二维码详解

    千次阅读 2018-02-11 16:09:30
    二维码知识介绍一、二维码的分类二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着...

    二维码知识介绍

    一、二维码的分类

    二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着更高的数据存储容量。

    从形成方式上,二维码可以分为两类,

    1、堆叠式二维码:在一维条形码的基础上,将多个条形码堆积在一起进行编码,常见的编码标准有PDF417等

    image

                              图1 PDF417码示例

    2、矩阵式二维码:在一个矩阵空间中通过黑色和白色的方块进行信息的表示,黑色的方块表示1,白色的方块表示0,相应的组合表示了一系列的信息,常见的编码标准有QR 码,汉信码等

     image                   image

           图2 QR码示例                                  图3 汉信码示例

    PDF417由美国研发,在美国地区使用广泛

    汉信码由中国自主研发,目前已在政府相关领域得到初步的使用。

    QR码由日本研发,目前很多的应用都是用QR码进行编码,译码

    目前使用最广的是QR码,所以接下来的内容会对QR码进行讲解,下文中提到的二维码,指的就是QR码

    QR码分为40个版本,版本1由21x21个方块组成,每个版本增加4个方块,版本40由177x177个方块组成。每增加一个版本,QR码可储存的信息数量也随之增多。

    版本1的二维码最多可以储存25个字符或41个数字,而版本40的二维码最多可以储存4296个字符或7089个数字

    二、二维码的结构

    一个二维码可以分为两个部分,功能图形和编码区域

    image

                                             图4

    功能图形起到定位的作用

    位置探测图形:由三个黑白相间的大正方形嵌套组成,分别位于二维码左上角、右上角、左下角,目的是为了确定二维码的大小和位置。

    定位图形       :由两条黑白相间的直线组成,便于确定二维码的角度,纠正扭曲。

    校正图形       :仅在版本2以上存在,由三个黑白相间的小正方形嵌套组成,便于确定中心,纠正扭曲。

    数据区记录了具体的数据信息,纠错信息与版本信息。

    数据和纠错码:记录了数据信息和相应的纠错码,纠错码的存在使得当二维码的数据出现允许范围内的错误时,也可以正确解码。

    版本信息       :仅在版本7以上存在,记录具体的版本信息。

    格式信息       :记录使用的掩码和纠错等级。

    此外二维码的外围还留有一圈空白区,主要是为了便于识别而存在。

    三、数据编码与实例

    针对不同的数据,QR码设计了不同的数据编码编码方式,我们可以根据数据的种类选择合适的编码方式进行编码。

    数字编码(Numeric)        :可编码0-9,10个数字,如果需要编码的数字的个数不是3的倍数,最后剩下的1或2位数会被转成4或7bits,其它的每3位数字会根据不同版本被编成 10,12,14bits

    字符编码(Alphanumeric) :可编码0-9,大写的A-Z,以及9个其他的字符(space $ % * + – . / :);

    8位字节模式(8-bit Byte)     :可编码JIS X 0201的8位Latin/Kana字符集

    除此之外,QR还提供了其他的编码方式,每一个编码方式都有其独有的id进行标识,这些标识会记录在数据区的前端,使得解码器可以根据二维码使用的编码方式对数据进行解码

          image

                                      图5   一些编码方式及其标识

    纠错码

    二维码存在4个级别的纠错等级,每个纠错级别可修正的错误与标识见图6,纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的可储存的数据就会减少,版本1的二维码在L级别下可储存25个字符,在H级别下只能储存10个字符。

              image

                                 图6

    下面给一个01234567在版本1下用数字编码(Numeric),选择的纠错级别是M的示例

    第一步,将定位图案放到二维码中

          image

                             图7

    第二步:进行数据编码

    根据图8,版本1下,采用Numeric Mode编码时,每三个数字需要10个bits进行标示

    image

                                                图8

    012 ->0000001100

    345 ->0101011001

    67 ->1000011

    组合起来为

    0000001100 0101011001 1000011

     

    在数据的头尾加上一些标准要求的信息

    数字个数 (8) = 0000001000

    编码格式      =0001

    终止符         =0000

    组合起来为

    0000001100 0101011001 1000011->

    0001 0000001000 0000001100 0101011001 1000011 0000

     

    按8bit一组重新排列,末尾不足的补零

    0001 0000001000 0000001100 0101011001 1000011 0000->

    00010000 00100000 00001100 01010110 01100001 10000000

     

    不足最大bit的添加补齐码(11101100 00010001),版本1 M下需要128bits

    00010000 00100000 00001100 01010110 01100001

    10000000->

    00010000 00100000 00001100 01010110 01100001

    10000000 11101100 00010001 11101100 00010001

    11101100 00010001 11101100 00010001 11101100

    00010001

    第三步:添加纠错码

    纠错码根据数据利用RS算法来进行计算,篇幅所限,这里就不具体讲解了,最终的结果如下:

    00010000 00100000 00001100 01010110 01100001

    10000000 11101100 00010001 11101100 00010001

    11101100 00010001 11101100 00010001 11101100

    00010001->

    00010000 00100000 00001100 01010110 01100001

    10000000 11101100 00010001 11101100 00010001

    11101100 00010001 11101100 00010001 11101100

    00010001 10100101 00100100 11010100 11000001

    11101101 00110110 11000111 10000111 00101100

    01010101

    第四步:将最终的数据编码按顺序放入二维码中

     image                                image

                          图9                                                                       图10

    从左下角开始,1为黑色,0为白色,按顺序依次填入二维码中

    第五步:添加格式信息和进行掩码运算

    得到的图像还需要对数据区进行掩码运算,掩码运算的目的是让图像中黑色和白色方块分布的更加均匀一些,便于解码

    有以下几种掩码运算,相应的标识和变换方式见图11,二维码的左上角的坐标为(0,0)

             image

                                                   图11

     

        image

                                  图12  坐标系和掩码运算的图案

    这里我们选择标识为011的掩码

    格式信息的组成为                       :纠错标识+掩码标识+BCH纠错码

    所以前面的纠错标识+掩码标识为:00011

    BCH纠错码计算为:

    image

    得到纠错码为                             :011 0101 1001

    格式信息为                                :00011 1101011001

    为了避免选择标识00的纠错类别和标识000的掩码运算,照成格式信息为全0的数字,所得的格式信息还要与101010000010010做异或运算

    000111101011001

    101010000010010   XOR

    101101101001011

    最终的格式信息为                      :101101101001011

    将格式信息放入二维码中       

            image

                              图13

    对加格式信息后的二维码 进行掩码运算

    得到的最终二维码,储存的数据信息是01234567

           image

                          图14

    整个流程见图15

        image 
                                          图15


    四、二维码的安全知识

    虽然二维码本身承担的只是一些文本数据,但仍会导致一些安全问题

    1、攻击者将一些恶意网站或者一些恶意代码制作成二维码,用户扫描后,会自动下载一些恶意软件,或跳转到一些虚假网站给使用者造成危害,

    2、二维码内如果包含一些可执行的脚本,便可能导致xss攻击     如 http://www.wooyun.org/bugs/wooyun-2012-09145

    3、如果将一些敏感信息不加密而直接储存在二维码中,便会存在信息泄露的可能,比如11年火车票上的二维码就存在泄露使用者的身份证号码的问题。

    五、总结

    虽然我们在使用二维码的时候只需要用手机一扫即可,但二维码的编码和解码却包含了很多的步骤和很多的知识,此外二维码本身仅仅是数据的承载体,我们在使用时要针对一些敏感信息进行加密处理,防范潜在的攻击方式

     

    参考文献

    二维码的生成细节和原理  http://coolshell.cn/articles/10590.html#jtss-tsina

    QR二维码的攻击与防御   http://drops.wooyun.org/tips/160

    展开全文
  • QRCode二维码生成组件(珍藏版)

    千次下载 热门讨论 2020-07-30 23:33:23
    现在网上很多应用都是用二维码来分享网址或者其它的信息。尤其在移动领域,二维码更是有很大的应用场景。因为项目的需要,需要在网站中增加一个生成二维码分析网址的功能,在谷歌大幅度抽筋的情况下无奈使用百度。...
  • 二维码原理详解

    万次阅读 多人点赞 2019-08-02 21:55:01
    一:二维码 /QR Code(Quick Response)简介 是一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。近几年随着我国移动支付等等发展迅猛,变得非常...

    一:二维码 / QR Code(Quick Response)简介

    是一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。近几年随着我国移动支付等等发展迅猛,变得非常流行,但这个东西好像是日本人发明的...

    从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着更高的数据存储容量。

    从形成方式上,二维码可以分为两类:堆叠式二维码:在一维条形码的基础上,将多个条形码堆积在一起进行编码,常见的编码标准有PDF417等.这个是美国人发明的,不常用.矩阵式二维码:在一个矩阵空间中通过黑色和白色的方块进行信息的表示,黑色的方块表示1,白色的方块表示0,相应的组合表示了一系列的信息,常见的编码标准有QR 码,在我国非常常用.

    图1 PDF417码示例
    图2 QR码示例 

     

    由于学习需要,所以看了一些相关知识,觉得这个玩意就是一个密码算法.

    二:基本概念

    首先,我们先说一下二维码一共有 40 个尺寸。官方叫版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增加一个 version,就会增加 4 的尺寸,公式是:(V-1)*4 + 21(V是版本号) 最高 Version 40,(40-1)*4+21 = 177,所以最高是 177 x 177 的正方形。

    三.二维码组成及对应功能

    图3 QR码图示

     

    A:功能图形区:起到定位的作用

    a:定位图形

    由两条黑白相间的直线组成,便于确定二维码的角度,纠正扭曲。

    b:校正图形      

    仅在版本2以上存在,由三个黑白相间的小正方形嵌套组成,便于确定中心,纠正扭曲。

    c:位置探测图形

    由三个黑白相间的大正方形嵌套组成,分别位于二维码左上角、右上角、左下角,目的是为了确定二维码的大小和位置。

    B:数据编码区:记录了具体的数据信息,纠错信息与版本信息。

    d:数据码和纠错码

    数据码(Data Code ):存储要存放的数据信息

    纠错码(Error Correction Code ):纠错码的存在使得当二维码的数据出现允许范围内的错误时,也可以正确解码。这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。二维码存在4个级别的纠错等级,每个纠错级别可修正的错误与标识见图4,纠错级别越高,可以修正的错误就越多,需要的纠错码的数量也变多,相应的可储存的数据就会减少,版本1的二维码在L级别下可储存25个字符,在H级别下只能储存10个字符。

    图4 

    e:版本信息      

    仅在版本7以上存在,记录具体的版本信息。

    f:格式信息      

    记录使用的掩码和纠错等级。

    g:数据编码

    不在详述,见编码规则

    C:此外二维码的外围还留有一圈空白区:主要是为了便于识别而存在。

    四.编码规则(重点,所以单列)

    数据编码的方式有很多,如Numeric mode数字编码;Byte mode,字节编码;Alphanumeric mode 字符编码;Kanji mode 这是日文编码,也是双字节编码;Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码;Structured Append mode 用于混合编码,也就是说,这个二维码中包含了多种编码格式;FNC1 mode 等;

    每一个编码方式都有其独有的id进行标识,这些标识会记录在数据区的前端,使得解码器可以根据二维码使用的编码方式对数据进行解码.

    图5 编码方式及其标识

     

    1.字符编码示例

    Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。这些字符会映射成一个字符索引表。如图6所示:(其中的 SP 是空格,Char 是字符,Value 是其索引值) 编码的过程是把字符两两分组,然后转成下表的 45 进制,然后转成 11bits 的二进制,如果最后有一个落单的,那就转成 6bits 的二进制。而编码模式和字符的个数需要根据不同的 Version 尺寸编成9, 11 或 13 个二进制(如图7)

    先简单举个例子让大家觉得很简单明了:

    A B C D E F
    10 11 12 13 14 15

    那么字符串AB=10*45+11.

    为什么以长度为二的字符串举例,因为字符编码是两两分组

    接下来进入正题:

    在 Version 1 的尺寸下,纠错级别为H的情况下,编码: AC-42

    第一步:先两两分组:(AC)(-4)(2),然后把每一组转成 11bits 的二进制:

    (AC)=10*45+12 等于 462 转成 00111001110

    (41,4)=41*45+4 等于 1849 转成 11100111001

    (2) 转成 000010  落单就是6bits

    第二步:把这些二进制连接起来:00111001110 11100111001 000010,把字符的个数转成二进制 (Version 1-H 为 9 bits ): 5 个字符,5 转成 000000101(9bits图7)

    最后,在头上加上编码标识 0010(如图5) 和第 5二步的个数编码:  0010 000000101 00111001110 11100111001 000010

     

    图6  字符索引表

     

    2.数字编码示例

    Numeric mode 数字编码,从 0 到9。如果需要编码的数字的个数不是 3 的倍数,那么,最后剩下的 1 或 2 位数会被转成 4 或 7bits,则其它的每 3 位数字会被编成 10,12,14bits,编成多长还要看二维码的尺寸(图7说明了这点)

    在 Version 1 的尺寸下,纠错级别为H的情况下,编码: 01234567(和前面的字符编码差不多)

      1. 把上述数字分成三组: 012 345 67

      2. 把他们转成二进制:  012 转成 0000001100;  345 转成 0101011001;  67 转成 1000011。

      3. 把这三个二进制串起来: 0000001100 0101011001 1000011

      4. 把数字的个数转成二进制 (version 1-H 是 10 bits ): 8 个数字的二进制是 0000001000

      5. 把数字编码的标志 0001 和第 4 步的编码加到前面:  0001 0000001000 0000001100 0101011001 1000011

    图7

    五:结束符和补齐码

    1.结束符

    假如我们有个HELLO WORLD的字符串要编码,根据上面的示例二,我们可以得到下面的编码:

    编码 字符数 HELLO WORLD的编码 加上的结束符
    0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 0000

    按8bits重排:如果所有的编码加起来不是8个倍数我们还要在后面加上足够的0,比如上面一共有78个bits,所以,我们还要加上2个0,然后按8个bits分好组:

    00100000   01011011   00001011   01111000   11010001   01110010   11011100   01001101   01000011   01000000                                   2.补齐码

    最后,如果如果还没有达到我们最大的bits数的限制,我们还要加一些补齐码(Padding Bytes),Padding Bytes就是重复下面的两个bytes:11101100 00010001 (这两个二进制转成十进制是236和17,我也不知道为什么,只知道Spec上是这么写的)关于每一个Version的每一种纠错级别的最大Bits限制,可以参看QR Code Spec的第28页到32页的Table-7一表。

    假设我们需要编码的是Version 1的Q纠错级,那么,其最大需要104个bits,而我们上面只有80个bits,所以,还需要补24个bits,也就是需要3个Padding Bytes,我们就添加三个,于是得到下面的编码:

    00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000 11101100 00010001 11101100

    上面的编码就是数据码了,叫Data Codewords,每一个8bits叫一个codeword,我们还要对这些数据码加上纠错信息。

    六.纠错码

    见图四及其上面简述(思路有点混乱,排版出了点问题)

    那么,QR是怎么对数据码加上纠错码的?首先,我们需要对数据码进行分组,也就是分成不同的Block,然后对各个Block进行纠错编码,对于如何分组,我们可以查看QR Code Spec的第33页到44页的Table-13到Table-22的定义表。注意最后两列

    Number of Error Code Correction Blocks  需要分多少个块
    Error Correction Code Per Blocks 每一个块中的code个数,所谓的code的个数,也就是有多少个8bits的字节
    图8 不同Version +不同纠错级对应的值

    举个例子:上述的Version 5 + Q纠错级:需要4个Blocks(2个Blocks为一组,共两组),头一组的两个Blocks中各15个bits数据 (k)+ 各 9个bits的纠错码(r)(注:表中的codewords就是一个8bits的byte)(再注:最后一例中的(c, k, r )的公式为:c = k + 2 * r,因为后脚注解释了:纠错码的容量小于纠错码的一半)

    下图给一个5-Q的示例(因为二进制写起来会让表格太大,所以,我都用了十进制,我们可以看到每一块的纠错码有18个codewords,也就是18个8bits的二进制数)

    注意不要错误以为是上面的编码数据,上面的是Version 1的Q纠错级,而这个是Version 5 + Q纠错级,只是举个例子

    图9

     

    注:二维码的纠错码主要是通过Reed-Solomon error correction(里德-所罗门纠错算法)来实现的。由于这个算法相当的复杂,所以...

    七.最终编码

    放置规则:穿插放置

    如果你以为我们可以开始画图,你就错了。二维码的混乱技术还没有玩完,它还要把数据码和纠错码的各个codewords交替放在一起。如何交替呢,规则如下:

    对于数据码:把每个块的第一个codewords先拿出来按顺度排列好,然后再取第一块的第二个,如此类推。如:上述示例中的Data Codewords如下:

    数据码表
    块1 67 85 70 134 87 38 85 194 119 50 6 18 6 103 38  
    块2 246 246 66 7 118 134 242 7 38 86 22 198 199 146 6  
    块3 182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7
    块4 70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236

     

    我们先取第一列的:67, 246, 182, 70

    然后再取第二列的:67, 246, 182, 70, 85,246,230 ,247

    如此类推:67, 246, 182, 70, 85,246,230 ,247 ………  ……… ,38,6,50,17,7,236

    对于纠错码,也是一样:

    纠错码表
    块1 233 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39
    块2 87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 133
    块3 148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141
    块4 235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 236

    和数据码取的一样,得到:213,87,148,235,199,204,116,159,…… …… 39,133,141,236

    然后,再把这两组放在一起(纠错码放在数据码之后)得到:

    67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236

    这就是我们的数据区。

    最后再加上Reminder Bits,对于某些Version的QR,上面的还不够长度,还要加上Remainder Bits,比如:上述的5Q版的二维码,还要加上7个bits,Remainder Bits加零就好了。关于哪些Version需要多少个Remainder bit,可以参看QR Code Spec的第15页的Table-1的定义表。

    八.画出二维码图

    1.Position Detection Pattern

    首先,先把Position Detection图案画在三个角上。(无论Version如何,这个图案的尺寸就是这么大)

    位置探测图像

    2.Alignment Pattern

    然后,再把Alignment图案画上(无论Version如何,这个图案的尺寸就是这么大)

    校正图像

    关于Alignment的位置,可以查看QR Code Spec的第81页的Table-E.1的定义表(下表是不完全表格)

    下图是根据上述表格中的Version8的一个例子(6,24,42)

    3.Timing Pattern

    定位图形

    4.Format Information(下图中的蓝色部分)

    格式信息

    Format Information是一个15个bits的信息:

    这15个bits中包括:

    • 5个数据bits:其中,2个bits用于表示使用什么样的Error Correction Level, 3个bits表示使用什么样的Mask
    • 10个纠错bits。主要通过BCH Code来计算

    然后15个bits还要与101010000010010做XOR(异或)操作。这样就保证不会因为我们选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。

    5.Version Information(版本7以后需要这个编码,下图中的蓝色部分)

    版本信息

    Version Information一共是18个bits,其中包括6个bits的版本号以及12个bits的纠错码

    6.数据和数据纠错码

    然后是填接我们的最终编码,最终编码的填充方式如下:从左下角开始沿着红线填我们的各个bits,1是黑色,0是白色。如果遇到了上面的非数据区,则绕开或跳过。

    7.掩码图案

    这样下来,我们的图就填好了,但是,也许那些点并不均衡,如果出现大面积的空白或黑块,会告诉我们扫描识别的困难。所以,我们还要做Masking操作(掩膜操作)QR的Spec中说了,QR有8个Mask你可以使用,如下所示:其中,各个mask的公式在各个图下面。所谓mask,说白了,就是和上面生成的图做XOR操作。Mask只会和数据区进行XOR,不会影响功能区。

    其Mask的标识码如下所示:(其中的i,j分别对应于上图的x,y)

    下面是Mask后的一些样子,我们可以看到被某些Mask XOR了的数据变得比较零散了。

    Mask过后的二维码就成最终的图了。

    九:总而言之

    二维码的原理可以简单总结为:

    将我们想要存储的信息,通过不同的编码格式转换为二进制字符串,字符在变成0和1组成的序列之后,再进行一系列优化算法,就得到了最终的二进制编码.1对应黑色小方块,0对应白色小方块,然后将这些小方块八个一组填进大方块里.就变成了大家看到的二维码了.(说法过于简单,不要深究.当然里面除了要存储的信息还有类似上面所述的定位图案,功能性数据,纠错码,掩码等)

    展开全文
  • python学习之生成一个二维码(一)

    万次阅读 2019-05-30 20:27:38
    首先,简单介绍一下二维码二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型...

    首先,简单介绍一下二维码:二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
    二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。
    下面,就简单介绍一下,如何使用python,生成一个属于自己的二维码。
    安装必要的包:

    pip install qrcode
    pip install PIL  #好像只支持到python2.7;python3以上是用另外的库代替了,也就是下面的
    pip install pillow  #pil的派生分支,但比它更加活跃
    

    备注一下:使用的python版本是python3.6.4
    在这里插入图片描述
    代码部分:

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    u'''
    Created on 2019年5月29日
    @author: wuluo
    '''
    __author__ = 'wuluo'
    __version__ = '1.0.0'
    __company__ = u'重庆交大'
    __updated__ = '2019-05-29'
    import qrcode
    from qrcode.constants import ERROR_CORRECT_H
    from PIL import Image
    def generateQRCode(data, imgFn):
        qr = qrcode.QRCode(version=20,
                           error_correction=ERROR_CORRECT_H,
                           box_size=3, border=2)
        # 添加自定义文本信息,
        qr.add_data(data)
        qr.make()
        # 创建二维码图片
        img = qr.make_image()
        imgW, imgH = img.size
        w1, h1 = map(lambda x: x // 4, img.size)
        # 要粘贴的自定义图片,生成缩略图
        im = Image.open(imgFn)
        imW, imH = im.size
        w1 = w1 if w1 < imW else imW
        h1 = h1 if h1 < imH else imH
        im = im.resize((w1, h1))
        # 在二维码上中间位置粘贴自定义图片
        img.paste(im, ((imgW - w1) // 2, (imgH - h1) // 2))
        # 保存二维码图片
        img.save('G:\\WangLuoRuanJian\\qrCode.jpg')  # 自己的存储路径
        # img.save('G:/WangLuoRuanJian/qrCode.jpg')
        img.show()
    if __name__ == "__main__":
        generateQRCode(
            'https://blog.csdn.net/qq_43433255', 'G:\\WangLuoRuanJian\\wuluo.jpg')  # 前面是我的博客网址,后面是logo的路径
    

    运行效果:
    在这里插入图片描述
    怎么说,效果不佳!推荐:https://blog.csdn.net/qq_43433255/article/details/90704944
    最后,这里推荐一个快速生成二维码的网址:https://cli.im/text?cc7bf149d157f0ea3b6e0ed28b2045fb

    展开全文
  • 二维码生成原理及解析代码

    千次阅读 2019-06-14 17:38:19
    自从大街小巷的小商小贩都开始布满了腾讯爸爸和阿里爸爸的二维码之后,我才感觉到我大天朝共享支付的优越性。最近毕业论文写的差不多了,在入职之前多学一些东西也是好的。这里秉着好奇心,研究一下二维码的生成,并...
  • Android生成自定义二维码

    万次阅读 多人点赞 2019-11-13 10:20:38
    前面说过两种二维码扫描方式,现在说二维码生成,使用Google开源库Zxing,项目地址:https://github.com/ZBar/ZBar,我们只需要里面的jar包:core:x.x.x.jar,建议用core:3.3.0。 1.引入jar包 app build....
  • 如何使用 Python 生成酷炫的二维码

    万次阅读 多人点赞 2018-08-21 00:13:30
    新时代,人们有新的追求,自然而然会有新发明的诞生。去年,在“一带一路”国际合作高峰论坛举行期间,20 国青年投票选出中国的“新四大发明”:高铁、扫码支付、共享单车和网购。...
  • 二维码字体

    2020-07-27 23:32:08
    用于显示二维码的字体,
  • 开源二维码库libqrencode的使用 1.开源二维码库libqrencode的下载地址 libqrencode是一个日本人写的生成二维码的可以跨平台的c库,官网是这里,Github在这里。 2.平台 Linux下的安装步骤(Ubuntu1204) ...
  • 去年就有研究人员发现了一种新的网络钓鱼活动,该活动利用二维码将受害者重定向到网络钓鱼登陆页面,有效规避了旨在阻止此类攻击的安全解决方案和控制措施。比如去年针对法国的网络钓鱼攻击背后的攻击者就是使用了...
  • C# 二维码生成 ( QRCoder )

    万次阅读 2018-07-18 00:43:57
    二维码 1.前言 seaconch 最近在搞二维码方面的一些东西,所以接触了一些二维码相关,那么既然用过了就要有用过了的样子 其实关于二维码的文章真的多的数不胜数,有很多写的很认真,很好,但这就像是学习一样,...
  • QRCode,二维码,具有快速可读性和较大的存储容量。 安装、初试、直接显示、进阶、添加logo、封装
  • 小熙最近项目常用到二维码,但都是前端生成的,所以小熙想是否后端可以替代下。于是小熙特意查找学些相关资料,分享下学习结果。 二. 引入依赖和工具类 谷歌提供的依赖坐标(可去中央仓库搜索适合自己的版本,搜索...
  • 扫描二维码的url(个人码、收款码、支付码、群聊码都支持) 直接百度二维码在线扫描,把你的二维码上传扫描结果 我用的是草料二维码扫描器:https://cli.im/deqr 生成新的二维码 把你二维码扫描结果辅助粘贴到生成器...
  • 二维码解码工具

    万次阅读 2017-04-01 11:47:19
    http://tool.chinaz.com/qrcode/?jdfwkey=weexu
  • 1行Python代码制作动态二维码

    万次阅读 多人点赞 2020-09-22 09:12:29
    近日在GitHub上发现了一个比较有意思的项目,只需要一行Python代码就可以快捷方便生成普通二维码、艺术二维码(黑白/彩色)和动态GIF二维码
  • 1. 二维码在线生成: 1.1 浏览器测试:http://api.online-service.vip/qr/create?w=150&h=150&c=test 1.2 可在html的img标签src属性中直接引用; 如果二维码的属性相对固定, 可以把二维码保存下来, 二维码...
  • 二维码分类及简介

    千次阅读 2019-01-18 16:10:33
    二维码长什么样子就不说了,说说概念、历史、分类、结构及实现等。 1、二维码的概念: 2、二维码的发展历史: 3、一维码与二维码: 4、二维码的分类: 5、二维码分类-线性堆叠式二维码: 6、二维码...
1 2 3 4 5 ... 20
收藏数 222,168
精华内容 88,867
关键字:

二维码