目录

  • 一、什么是二维码:
  • 二、常用的码制
  • 三、为什么叫二维码
  • 四、二维码为什么是黑白相间的?
  • 五、QR CODE 介绍
  • 六、QR码纠错功能
  • 七、QR码的信息量和版本
  • 八、具体实现

一、什么是二维码:

二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)
分布的黑白相间的图形记录数据符号信息的。

二、常用的码制

Data Matrix, Maxi Code, Aztec, QR Code, Vericode, PDF417, Ultracode, Code 49, Code 16K等。

三、为什么叫二维码

二维码的名称是相对与一维码来说的:

比如以前的条形码,只有横向的竖条状信息,所以也叫“一维码”。

二维码呢,则是横向纵向都有信息,所有叫“二维码”。

二维码优点有:

存储的数据量更大;可以包含数字、字符,及中文文本等混合内容;有一定的容错性(在部分损坏以后可以正常读取);空间利用率高等。

二维码中,最流行莫过于QR CODE。

四、二维码为什么是黑白相间的?

因为黑色表示二进制的“1”,白色表示二进制的“0”。

我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中。

制作二维码输入的信息可以分成三类:

​ 文本信息,比如名片信息;

​ 字符信息,比如网址、电话号码;

​ 图片信息,甚至还可以包括简短的视频。

数据信息是怎么被编入的呢?

信息输入后,首先要选择一种信息编码的码制。现在常见的二维码都是以QR码作为编码的码制。QR码是矩阵式二维码,它是在一个矩形空间内,通过黑、白像素在矩阵中的不同分布,来进行编码的。我们知道电脑使用二进制(0和1)数来贮存和处理数据,而在二维码中,用黑白矩形表示二进制数据我们肉眼能看到的黑色表示的是二进制“1”,白色表示二进制的“0”,黑白的排列组合确定了矩阵式二维条码的内容,以便于计算机对二维码符号进行编码和分析。

五、QR CODE 介绍

QR(Quick-Response) code是被广泛使用的一种二维码,解码速度快。它可以存储多用类型

如上图时一个qrcode的基本结构,其中:
位置探测图形、位置探测图形分隔符、定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异;
校正图形:规格确定,校正图形的数量和位置也就确定了;
格式信息:表示改二维码的纠错级别,分为L、M、Q、H;
版本信息:即二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1),到177×177(版本40),每一版本符号比前一版本 每边增加4个模块。
数据和纠错码字:实际保存的二维码信息,和纠错码字(用于修正二维码损坏带来的错误)。
简要的编码过程:

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

QR码可以从任意方向读取:

QR码从360°任一方向均可快速读取。其奥秘就在于QR码中的3处定位图案,可以帮助QR码不受背景样式的影响,实现快速稳定的读取。

提示:

QR码是日本产的二维码,因此非常适合处理日文字母和汉字。QR码字集规格定义是按照日本标准“JIS第一级和第二级的汉字”制定的,因此在日语处理方面,每一个全角字母和汉字都用13比特的数据处理,效率较高,与其他二维码相比,可以多存储20%以上的信息。

六、QR码纠错功能

QR码具有“纠错功能”。即使编码变脏或破损,也可自动恢复数据。这一“纠错能力”具备4个级别,用户可根据使用环境选择相应的级别。调高级别,纠错能力也相应提高,但由于数据量会随之增加(对应二维码里包含的错误校验信息增加),编码尺寸也也会变大,图形也会变密。
用户应综合考虑使用环境、编码尺寸等因素后选择相应的级别。 在工厂等容易沾染赃物的环境下,可以选择级别Q或H,在不那么脏的环境下,且数据量较多的时候,也可以选择级别L。一般情况下用户大多选择级别M(15%)。

那是怎么修正错误呢?

比如我要存一百个数字,那可以额外加一个这一百个数字的和,如果有一个数字缺失,那根据这个和求出,这个就是百分之一的可被修正。如果想两个缺失能被复原就需要再加一些参数。所以信息量就增加了,对应图形就越来越密了。

七、QR码的信息量和版本

QR码设有1到40的不同版本,每个版本都具备固有的码元结构(码元数)。
码元是指构成QR码的方形黑白点。
码元结构是指二维码中的码元数。从版本1(21码元×21码元)开始,在纵向和横向各自以4码元为单位递增,一直到版本40(177码元×177码元)。

QR码的各个版本结合数据量、字符类型和纠错级别,均设有相对应的最多输入字符数。也就是说,如果增加数据量,则需要使用更多的码元来组成QR码,QR码就会变得更大,更密。

八、具体实现

PHP QR Code文档地址
PHP QR Code下载地址

// 通过引用PHP QR Code类库,最简单的调用方式
// 必须开启支持GD2扩展库支持
include "qrlib.php";
$PNG_WEB_DIR = 'temp/';
// 设置二维码图片缓存路径
$PNG_TEMP_DIR = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'temp' . DIRECTORY_SEPARATOR;
// 如果二维码图片缓存路径不存在,则需要重新创建
if (!file_exists($PNG_TEMP_DIR)) {mkdir($PNG_TEMP_DIR, 0777);
}
$filename = $PNG_TEMP_DIR . 'test.png';
// 设置二维码图片纠错级别
$errorCorrectionLevel = 'L';
if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], array('L', 'M', 'Q', 'H'))) {$errorCorrectionLevel = $_REQUEST['level'];
}
$filename = $PNG_TEMP_DIR . 'test' . md5($_REQUEST['data'] . '|' . $errorCorrectionLevel . '|' . $matrixPointSize) . '.png';QRcode::png($_REQUEST['data'], $filename, $errorCorrectionLevel, $matrixPointSize, 10);
echo '<img src="' . $PNG_WEB_DIR . basename($filename) . '" /><hr/>';
// 设置二维码图片大小
$matrixPointSize = 4;
if (isset($_REQUEST['size'])) {$matrixPointSize = min(max((int) $_REQUEST['size'], 1), 10); // 做一个限制大小,最小为1,最大为10
}// 基准测试;生成耗时等
QRtools::timeBenchmark();// 参数$text表示生成二位的的信息文本;
// 参数$outfile表示是否输出二维码图片文件,默认否;
// 参数$level表示容错率;分别是L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);
// 参数$size表示生成图片大小,默认是3;
// 参数$margin表示二维码周围边框空白区域间距值;
// 参数$saveandprint表示是否保存二维码并显示
QRcode::png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false);

QR Code 其它示例

参考文章1
参考文章2

二维码的原理以及怎么生成二维码相关推荐

  1. java生成二维码到文件,java生成二维码转成BASE64

    java生成二维码到文件,java生成二维码转成BASE64 如题,利用java和第三方库,把指定的字符串生成二维码,并且把二维码保存成图片,转换成BASE64格式. 需要的jar文件: packag ...

  2. 条形码、二维码扫一扫和生成二维码采用ZXing3.0开源库在android studio中实现

    在开始之前先给各位上个运行效果图 二维码QRcode全称Quick Response Code 通过在一个矩形区域内使用黑白像素来进行编码 高纠错性.高可用性.高识别性 四周面有3个大的方框和一个小的 ...

  3. 直播视频app源码,Android 点击生成二维码

    直播视频app源码,Android 点击生成二维码实现的相关代码 activity.xml代码如下: <?xml version="1.0" encoding="u ...

  4. android将apk生成的二维码放到本地tomcatjenkin(Android 生成二维码)

    如何将apk做成二维码可供下载? 具体步骤 你把apk的链接找到 然后在找到二维码生成器,把链接放就去,生成二维码就可以了!亲试效果很好 怎么找链接,我这边只有文件 搜索二维码生成器 本回答由网友推荐 ...

  5. 【Vue】Vue生成二维码 Vue把url地址生成二维码手机打开 扫一扫手机端打开实战案例 vue生成二维码

    代码 npm install qrcodejs2 --save 代码引入到项目中,不需要再main.js做处理,只需要在使用的vue页面中引入. 在页面中使用 <template>< ...

  6. 速码工具箱,Excel批量生成二维码,瞬间搞定!

    之前写过一篇文章,<批量生成二维码>,当时介绍了VBA中两种生成二维码的方式,一种需要引用QRmaker控件,一种是纯代码生成的方式.但是这两种方式都有一个最大的bug--不支持64位. ...

  7. 使用IDEA创建一个通过url链接生成二维码的java程序|自动生成二维码

    平时使用了那么多的二维码,今天我们自己做一个二维码.今天刚安装了IDEA,学会了用法,就来通过IDEA做一个生成二维码的程序. 首先新建一个项目 设置项目名称 点击Next之后,出现下图所示页面:   ...

  8. 个人介绍怎么制作二维码?轻松一键在线生成二维码图片

    自己的个人信息做成二维码图片,直接扫码就能查看你的详细信息.非常的方便,代替了传统的纸质名片.那么,这种二维码名片怎么制作呢?有没有简单又便捷的方法吗? 一.什么样的二维码制作工具好用? 机智熊二维码 ...

  9. IOS抖音短视频APP开发关于扫描二维码,并根据文本生成二维码

    IOS抖音短视频APP开发关于扫描二维码,(根据光线强弱显示隐藏闪光灯)并根据文本生成二维码. WeakSelf; //IOS抖音短视频APP开发构建扫描样式视图 _scanView = [[WSLS ...

最新文章

  1. 【转】UIColor对颜色的自定义
  2. DOCKER上运行DOTNET CORE
  3. VS2005工程的Device右边内容为空问题
  4. java spring 上传图片,springboot 上传图片并回显
  5. getmenuiteminfo无法读取内存_笔记本内存加装教程,看完包会!为了这篇文章,我把电脑都拆了!...
  6. enterprise architect复制到word中的标签怎么改变_7个 Word 技巧,不会别说自己会 Word...
  7. bzoj 3028 食物——生成函数
  8. 关于微信退款出现错误代码:52的解决方法【转】
  9. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
  10. html5查看ies文件,5千+ IES光域网文件 5312 IES Files + IES 预览
  11. Android——ViewHolder的作用与用法
  12. k8s [kubelet-check] Initial timeout of 40s passed.解决方案
  13. 哪吒之魔童降世视听语言影评_动画电影《哪吒之魔童降世》艺术语言分析
  14. 懒人神器,IDEA插件之EasyCode,自动生成CRUD代码
  15. 运筹与决策(二)excel画图、公式与函数用法
  16. Google MicroData,谷歌微数据为博客添加评级
  17. Centos 下解压和压缩rar文件
  18. ntpd服务状态及日志查询方式
  19. WinDbg调试的前因后果
  20. globalmapper如何选取图像上的点_图像去雾的算法历史与综述

热门文章

  1. uniapp 给H5网站添加图标favicon.icon
  2. 5G正式商用,中国电信却推出19元70G流量4G套餐,网友:少点套路吧
  3. ATL炒冷饭学习之三:CoInitialize/CoUninitialize
  4. 使用request下载图片
  5. 获取 RSA key
  6. 角色移动的步长、步速与滑步现象
  7. java构造函数之间的调用–圆柱体类设计
  8. Mock测试工具篇---Fiddler的使用
  9. 计算机基础知识字节,计算机基础知识:什么是位、字节、字、KB、MB
  10. Linux 下不容错过的软件推荐