引言

二维码已经成为我们日常生活中必不可少的组成部分了,登录需要扫一扫二维码、买东西付钱需要扫一扫二维码、开会签到也需要扫一扫二维码,那么如此广泛使用的二维码技术,背后的原理是怎样的呢?本文将结合二维码的发展历程以及典型应用场景,分析二维码背后的技术原理。

 

二维码发展简史

2.1 条形码的诞生

在理解二维码技术原理之前,我们先来简单看下它是怎么发展起来的。早在1948年,伯纳德·塞尔沃还是费城煤气科技学院的一名研究生,在一次偶然的机会他得知当地的一家超市的老板想要院长帮忙设计一种可以扫描商品价格的装置,用以提高超市内货品销售的效率。因为超市里的收银员在结算货品的时候每次都需要手动输入架构,超时客流量达的时候,收银员结算效率十分低下。但是院长觉得这是一件非常不容易做到的事情。

然而伯纳德·塞尔沃与他的朋友约瑟夫·伍德兰德却觉得这是一个巨大的商机,决定要好好设计做出个可以商用的产品出来。在尝试了紫外线照射石墨发光的方案、盲点系统以及点线符号系统等方案之后,由于当时的技术限制,都没有得到广泛的应用。

转眼时间来到了20世纪60年代,伍德兰德始终没有放弃当年那么没有实现商业化应用的金点子。此时他已经是IBM的一位工程师了,在公司期间,他不断阐述自己关于条形码的技术实现想法,同事不断强调条形码的商业价值。与此同时,激光以及计算机已经开始应用起来,条形码实现的技术基础已经完成。大概在1969年,伍德兰德参与到IBM公司投入的由乔治·劳雷尔负责的超市扫描仪和标签研究项目组中,经过几年的潜心研究,IBM终于推出了可识别的条形码。

在1974年6月26日的这一天,世界上第一个条形码扫描器被安装在俄亥俄州特洛伊的马什超市里。第一件被扫描的商品是10包箭牌的多汁水果味口香糖,这包口香糖如今已被美国历史博物馆收藏 。而后,条形码被广泛应用于商品、书籍、邮政等系统中,极大地提升了业务运行效率。

我们可以看得出来推动技术进步的往往都是现实生活中的业务需求。但是随着条形码的广泛用,它的不足之处逐渐显现出来:

1、条形码的数据表示内容非常有限,只能表示数字以及字母,无法表示更多的其他字符信息;

2、条形码表示的数据量也非常有限,如果想要包含更多的数据只能不断的进行水平拉伸,导致条形码越来越大,不利于商用;

3、条形码如果出现变形或者条形丢失就会造成数据的不可获取,影响业务的正常使用;

正因为条形码存在着这样以及那样的不足之处,人们对于出现有一种可以表达更多信息的的期望与日俱增。

2.2 二维码横空出世

虽然二维码的应用在中国大放异彩,但是实际上它是日本人发明的。日本 Denso Wave 公司(日本电装株式会社(Denso Corporation)旗下的子公司)的腾弘原是二维码的发明者。在公司的业务中需要对汽车的零部件标注属性信息,包括产地、生产时间、生产批次等等信息,传统的条形码无法满足大量信息的标注,因此需要一种涵盖更加多信息的标注方式。

腾弘原想到既然一维的条形码没办法表达更多消息,那么是不是可以增加维度来让其表示更多的信息,这就是二维码的思考雏形。但是紧接着又遇到了如何让这个二维码能够实现高速的读取。技术攻关小组利用正方形的四个角中的三个来作为定位符,然后通过剩余的一个角来判断实际二维码的方向,从而达到无论是从什么方向进行扫描,都不影响二维码内容的读取。

经过几年的反复测试,腾弘原的攻关小组终于攻克技术难关,这个小小的方块二维码在信息存储上相比条形码提升了300倍,而在二维码的识别速度上提升了10倍。在1994年,DENSO WAVE公司面向全日本开始推广二维码技术,并将其命名为“Quick Response Code”。时至今日,二维码已经在全世界范围内得到广泛应用,尤其是在中国可以说是发挥到了极致。

技术原理

在网上我们可以轻松找到在线制作二维码的工具网站,这些网站中,可以转化为二维码的信息包含了,文本、URL、图片以及音视频等等。由此可知二维码的本质实际就是一种数据信息的表现方式。

我们都知道二维码是由很多个白色方块以及黑色方块组成,实际上就是对应计算机世界中的0-1二进制语言。其中黑色小方块代表1,白色小方块代表0。因此这些看似没有规律的黑白方块二维码组合在一起就是0-1组成的信息组合。而0-1组成的二进制数据实现对于信息的编码,也是计算机可以看懂的语言。

手机进行二维码扫描的时候,由于二维码是黑白相间的二位点阵,通过光的反射进入手机摄像头时候,手机中的CMOS感光元件将接收到的光信号转化为电信号,而二维码代表的0-1组合实际在手机中就是对应的高低电位,最终解析为二维码对应的标注信息。

 

扫码登录

扫码登录是二维码非常典型的应用场景,以前我们登录网站需要输入用户名以及密码,有时候还为一时想不起来密码是多少而非常着急。自从有了二维码登录之后,只要拿出手机扫一扫web端的二维码就可以完成登录操作非常方便,那我们就来分析下二维码扫描登录的技术原理是怎样的吧。

对于登录这件事情来说,其本质实际包含了两件事情,第一件事情是告诉平台你是谁,第二件事情是向平台证明你就是你不是别人。那传统的用户名以及密码登录的方式,用户名实际就是告诉平台你是谁,而密码就是向平台证明你就是你。那么放在二维码扫码登录的场景下,实际也是需要完成这两件事情的支撑。下面我们就看下扫码登录的实现机制。

在进行扫码登录之前,我们需要先在客户端进行登录操作。在客户端登录的时候,需要输入用户名以及密码信息,此后的客户端与服务端的交互过程大致如下所示:

1、首先用户在客户端输入用户名以及密码进行登录操作;

2、客户端携带用户名、密码以及设备信息向服务端发起登录请求;

3、服务端校验用户名以及密码信息,同时将账号信息与设备信息进行绑定,并返回token信息;

4、客户端保存token信息;

5、再次登录的时候不需要再传递用户名以及密码,将token信息以及设备信息传递给服务端,服务端校验token以及设备信息;

这里的token信息实际就是代替了账号以及密码信息,可以理解为一种数据结构存储了账号、设备等信息,用以后期的服务端校验。

上面所说的是客户端登录的大致步骤,它是客户端扫码登录的基础,接下来我们再看下扫码登录的大致业务流程,如下所示:

在这个过程中最重要的是生成临时的token,这个临时token实际就是一种登录的凭证,并且与二维码一一对应,用过一次就会失效。那为什么要有这个临时的token呢?实际是为了解决扫码这个动作与登录的连接关系,系统需要确认二维码是被客户端扫描后进行的登录操作。

总结

本文主要结合了二维码的技术发展历程,阐述了二维码的技术原理,同时对二维码典型的应用场景进行了技术原理的分析,相信通过本文大家对于二维码的原理有了更加深刻的理解。

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

每天都扫的二维码,你知道它的技术原理吗? 每天都扫的二维码,你知道它的技术原理吗?...相关推荐

  1. 这张「二维码」火到了GitHub热榜第一:扫一扫,打破系统边界,文件秒传

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这张「二维码」,今天火到了GitHub热榜第一. 为什么这么火? 只要扫描这张二维码,通过Wi-Fi,文件就可以在电脑和手机之间互传--文件 ...

  2. 【Exception】微信小程序,配置普通链接二维码规则 文件校验失败问题 校验文件检查失败 扫普通链接二维码打开小程序

    [Exception]微信小程序,配置普通链接二维码规则 文件校验失败问题 校验文件检查失败 扫普通链接二维码打开小程序 一.问题描述 1.公司业务有个需求,扫描普通的二维码,跳转到小程序的某个页面, ...

  3. 每年扫码千亿次!微信官方开源了自家优化的二维码引擎!3行代码让你拥有微信扫码能力...

    本文转载自OpenCV团队. 十天前,微信官方开发团队在 opencv_contrib 开源了自家优化9年的二维码引擎!各位读者可编译最新版OpenCV及opencv_contrib ,直接使用! 2 ...

  4. 金蝶云星空二维码整体解决方案 金蝶云星空条码管理系统 金蝶ERP移动解决方案 金蝶云星空条码扫描 金蝶云星空WMS仓库移动扫码 金蝶安卓PDA扫码方案 金蝶云星空出入库盘点出货条码扫码 提供源码

    本人在ERP实施公司做顾问四五年,参与企业实施ERP十多个项目,非常熟悉企业ERP流程,在实施过程遇到众多问题,提出了不少根据企业具体情况的解决方案.          最近定制开发了一套适合企业的条 ...

  5. 目前ipad协议和安卓协议能实现微信百分之90功能 扫码进群 注册 阅读 关注支付功能等都能实现吗?ipad协议源码

    目前ipad协议和安卓协议能实现微信百分之90功能 扫码进群 注册 阅读 关注 支付功能等都能实现 需要协议 联系作者薇WLWCXKF 最新版本 功能强大 稳定一手 getLoginQRCode (获 ...

  6. java 二维码原理以及用java实现的二维码的生成、解码

    QR码生成原理(一) 一.什么是QR码 QR码属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化.QR码的样子其实在很多场合已经能够被看到了,我这还是贴个图展示 ...

  7. 微信bug二维码崩溃漏洞?poc来了! 生成你们自己的二维码

    注意:本代码仅供学习使用 微信崩溃?微信二维码崩溃了?微信最新二维码崩溃BUG,不知道问题在哪里.使用下面的二维码,轻松帮你复现 首先在命令行安装 pip install qrcode 以下就是pyt ...

  8. 使用二维码识别技术的好处_施工工艺用二维码如何交底?

    施工工艺用二维码如何交底? 传统施工工艺交底,需要大量纸质资料,存档.交底极为麻烦:依托二维码+小程序交底方式,扫码即可查看交底记录,小编教大家制作施工工艺交底管理二维码: 施工工艺 施工工艺交底(静 ...

  9. 算法013:二维数组中的查找-在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断中是否存在

    题目:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.示例: 现有 ...

  10. uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。

    推荐一款适用所有Javascript运行环境的二维码生成组件. uQRCode是一款基于Javascript环境开发的二维码生成插件,适用所有Javascript运行环境的前端应用和Node.js应用 ...

最新文章

  1. [转载]Eclipse.ini的相关说明
  2. KMeans和KMedoid 的Matlab实现
  3. Juniper SRX防火墙系统会话链接的清除
  4. MySQL Cluster 配置详细介绍
  5. 牛客练习赛74 D CCA的图
  6. eclipse和Tomcat绑定
  7. 《计算机网络》第七章:应用层(The Application Layer)
  8. TrueNAS SCALE是什么
  9. centos7下使用git提交代码
  10. javascript实现划词搜索功能(兼容IE,firefox,opera)
  11. leetcode刷题日记-在线选举
  12. Chrome一直在更新的几个广告拦截插件
  13. 尚学堂马士兵servlet/JSP笔记(一、Http协议及WebApp初步)
  14. 2022年上半年软件设计师下午真题试题(案例分析)及答案
  15. A Neural Algorithm of Artistic Style : Neural Style Transfer with Eager Executon
  16. c++ 字母降落小游戏
  17. 基于站长之家(CNZZ)的网站流量统计分析 (以vue代码为例)
  18. c语言gl函数,R语言:gl()函数
  19. selenium翻页获取京东图书名称和价格
  20. 信息学奥赛第九节 —— 贪心算法(需要安排几位师傅加工零件 + 排队打水问题)

热门文章

  1. cmd静默start命令打开带空格文件夹或文件(静默自动打开虚拟机)
  2. 如何用PR将手机拍摄的竖屏4K视频转成横屏
  3. ceph---stale状态pg处理方法
  4. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第3章 无线个域网 3.1蓝牙...
  5. 聪明的人脸识别1——Keras 搭建自己的Facenet人脸识别平台
  6. RevitAPI: Revit 2016里的Python代码例子Sample code
  7. .NET跨平台初体验
  8. 一个半路出家十年Java老程序员的真实经历
  9. 我的算法之狼追兔子问题之Java(while)
  10. android 平板 骁龙,120Hz高刷屏+骁龙865,安卓最强平板曝光,能否超越苹果?