0

0

二维码是什么 二维码的工作原理【详解】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-06 13:53:23

|

801人浏览过

|

来源于php中文网

原创

二维码是二维黑白点阵编码的图形符号,通过光学识别将0/1像素转为比特流,经纠错解码还原原始数据,并依内容类型触发相应操作。

二维码是什么 二维码的工作原理【详解】 - php中文网

一、二维码的本质定义

二维码是一种在二维平面上以黑白像素点阵形式编码信息的图形符号,它突破了一维条形码仅沿水平方向存储数据的限制,可在横向与纵向两个维度同时承载数据。每个黑色方块对应二进制中的1,每个白色方块对应二进制中的0,整幅图像即为一段可被光学设备识别并还原的比特流。

1、二维码并非天然存在,而是由原始数据(如网址、文本、联系方式等)经特定编码算法(如QR Code标准中的Reed-Solomon纠错编码与掩模处理)转换而来。

2、其结构包含固定位置探测图形(三个角落的“回”字形方块)、定位图形、格式信息区、版本信息区及数据与纠错码区域,所有模块协同确保设备无论从何种角度、光照或轻微破损条件下均可准确定位与解码。

二、光电信号转换过程

二维码识别依赖于光反射强度差异引发的电信号变化。扫描设备(如手机CMOS传感器)向二维码表面投射环境光或主动光源,接收器实时捕捉各像素点反射回来的光强分布,并将其转化为灰度图像矩阵。

1、图像预处理阶段对采集画面进行二值化处理,设定阈值将灰度图转为纯黑(0)与纯白(1)构成的二值图。

2、系统依据三个位置探测图形的几何关系,校正图像倾斜、透视畸变与缩放比例,完成坐标系归一化。

3、按标准规定的寻址顺序(如QR Code从右下角开始逆时针螺旋读取),逐点提取二值矩阵中每个单元格的0/1状态,形成原始码流。

三、二进制码流解码机制

获取到的0/1序列并非直接对应可读内容,需经过多级协议解析:先分离出格式信息以确认纠错等级与掩模类型;再应用对应掩模规则还原原始数据位;最后利用Reed-Solomon纠错算法检测并修复因污损、反光或低分辨率导致的误码位。

1、纠错码段与数据段交织排列,允许最多30%面积损坏仍可完整恢复原始信息。

2、解码器根据头部标识判断数据模式(数字、字母、字节、汉字或混合模式),调用相应字符集映射表将二进制分组转换为UTF-8或Shift-JIS等编码的字符串。

智慧车行预约小程序
智慧车行预约小程序

智慧车行小程序,是一个专门为洗车/4S/车辆维修行业打造的小程序,前后端完整代码包括车行动态,养车常识,保养预约,维修预约,洗车美容预约,汽车检测预约等功能。采用腾讯提供的小程序云开发解决方案,无须服务器和域名预约管理:开始/截止时间/人数均可灵活设置,可以自定义客户预约填写的数据项预约凭证:支持线下到场后校验签到/核销/二维码自助签到等多种方式详尽的预约数据:支持预约名单数据导出Excel,打印

下载

3、若内容为URL,则交由操作系统启动默认浏览器跳转;若为vCard,则触发联系人导入流程;若为Wi-Fi配置,则自动填充SSID与密码并尝试连接。

四、矩阵式与堆叠式两类实现路径

当前主流二维码分为矩阵式(如QR Code、Data Matrix)与堆叠式(如PDF417、Code 16K)两大技术路线。前者以正方形点阵为基本单元,通过点的有无表达信息;后者将多个一维条码按行堆叠,并添加行指示符与复位符实现跨行同步。

1、矩阵式二维码支持全向识别,具备更强的空间适应性与容错冗余设计,适用于移动终端快速扫读场景。

2、堆叠式二维码单行信息密度接近传统条形码,整体容量随行数线性增长,适合工业环境中需嵌入长文本或结构化数据的标签打印。

五、黑白方块背后的数学基础

二维码的生成本质上是离散数学与信息论的工程实践。所有编码标准均基于伽罗瓦域GF(2⁸)构建多项式运算体系,用以生成纠错码字。例如QR Code中,数据多项式D(x)与生成多项式G(x)在GF(256)内做模除运算,所得余式即为附加在数据后的纠错码R(x)。

1、每个二维码版本(V1至V40)对应不同尺寸的模块总数(21×21至177×177),模块数量严格遵循公式N = 17 + 4 × V。

2、定位图形采用固定比例的黑白交替“回”字结构(7×7模块),其边界满足1:1:3:1:1的宽度比,该比例在频域上形成唯一峰值,便于快速锁定。

3、格式信息区使用BCH(15,5)编码,仅15位即可表示8种掩模模式与4级纠错能力组合,并能纠正任意2位错误。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

253

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1458

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

612

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

547

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

542

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

159

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

77

2025.08.07

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.2万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.7万人学习

Git 教程
Git 教程

共21课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号