Java番外杂谈之每天扫的二维码你了解它内含的信息吗
作者:慕枫技术笔记
⭐️二维码发展简史⭐️
条形码的诞生
在理解二维码技术原理之前,我们先来简单看下它是怎么发展起来的。早在1948年,伯纳德·塞尔沃还是费城煤气科技学院的一名研究生,在一次偶然的机会他得知当地的一家超市的老板想要院长帮忙设计一种可以扫描商品价格的装置,用以提高超市内货品销售的效率。因为超市里的收银员在结算货品的时候每次都需要手动输入架构,超时客流量达的时候,收银员结算效率十分低下。但是院长觉得这是一件非常不容易做到的事情。
然而伯纳德·塞尔沃与他的朋友约瑟夫·伍德兰德却觉得这是一个巨大的商机,决定要好好设计做出个可以商用的产品出来。在尝试了紫外线照射石墨发光的方案、盲点系统以及点线符号系统等方案之后,由于当时的技术限制,都没有得到广泛的应用。
转眼时间来到了20世纪60年代,伍德兰德始终没有放弃当年那么没有实现商业化应用的金点子。此时他已经是IBM的一位工程师了,在公司期间,他不断阐述自己关于条形码的技术实现想法,同事不断强调条形码的商业价值。与此同时,激光以及计算机已经开始应用起来,条形码实现的技术基础已经完成。大概在1969年,伍德兰德参与到IBM公司投入的由乔治·劳雷尔负责的超市扫描仪和标签研究项目组中,经过几年的潜心研究,IBM终于推出了可识别的条形码。
在1974年6月26日的这一天,世界上第一个条形码扫描器被安装在俄亥俄州特洛伊的马什超市里。第一件被扫描的商品是10包箭牌的多汁水果味口香糖,这包口香糖如今已被美国历史博物馆收藏 。而后,条形码被广泛应用于商品、书籍、邮政等系统中,极大地提升了业务运行效率。
我们可以看得出来推动技术进步的往往都是现实生活中的业务需求。但是随着条形码的广泛用,它的不足之处逐渐显现出来,
1、条形码的数据表示内容非常有限,只能表示数字以及字母,无法表示更多的其他字符信息;
2、条形码表示的数据量也非常有限,如果想要包含更多的数据只能不断的进行水平拉伸,导致条形码越来越大,不利于商用;
3、条形码如果出现变形或者条形丢失就会造成数据的不可获取,影响业务的正常使用;
正因为条形码存在着这样以及那样的不足之处,人们对于出现有一种可以表达更多信息的的期望与日俱增。
二维码的横空出世
虽然二维码的应用在中国大放异彩,但是实际上它是日本人发明的。日本 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呢?实际是为了解决扫码这个动作与登录的连接关系,系统需要确认二维码是被客户端扫描后进行的登录操作。
微信第三方扫码登录
所谓微信第三方扫码登录指的是登录CSDN,但是使用的是微信账号进行登录,实际上就是用微信的账号信息来当做CSDN账号信息使用。它上上述的客户端登录的最大不同就在于多了和微信开放平台的交互。通过从微信开放平台获取用户的头像、用户名等信息。
⭐️总结⭐️
本文主要结合了二维码的技术发展历程,阐述了二维码的技术原理,同时对二维码典型的应用场景进行了技术原理的分析,相信通过本文大家对于二维码的原理有了更加深刻的理解。
到此这篇关于Java番外杂谈之每天扫的二维码你了解它内含的信息吗的文章就介绍到这了,更多相关Java 二维码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!