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 二维码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java使用jar包生成二维码的示例代码

    使用java进行二维码的生成与读取使用到了谷歌的zxing.jar 第一步 导入,maven依赖或者下载指定jar包 <!-- https://mvnrepository.com/artifact/com.google.zxing/javase --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version

  • Java 生成带Logo和文字的二维码

    ZXing 是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing 可以实现使用手机的内置的摄像头完成条形码的扫描及解码.本章讲解用 ZXing 生成和扫码二维码. 依赖 在Java项目中pom.xml加入: <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version&g

  • Java如何生成带网站链接(URL)的二维码

    QR 码 QR 码最常见的应用便是为网站中一个特定的网页或下载页带来流量.因此,QR码常常会编码URL或网站地址,用户可以通过手机摄像头扫描,并在其浏览器中打开.URL可以直接编码在QR码中. QR(Quick-Response) code是被广泛使用的一种二维码,解码速度快. 它可以存储多用类型 如上图时一个qrcode的基本结构,其中: 位置探测图形.位置探测图形分隔符.定位图形:用于对二维码的定位,对每个QR码来说,位置都是固定存在的,只是大小规格会有所差异; 校正图形:规格确定,校正图形

  • Java实现获取小程序带参二维码并保存到本地

    目录 获取小程序带参二维码并保存到本地 业务场景 POSTMAN调试 WxUtil封装:下载带参数的小程序二维码 Controller调用 下载验证 微信小程序码的生成及保存到阿里云oss 阿里云oss工具类 获取小程序带参二维码并保存到本地 业务场景 下载并保存带参数的小程序二维码,用户直接扫描带参二维码就进入小程序,自动根据参数完成部分业务.这个时候就需要用到微信小程序提供的二维码接口 wxacode.getUnlimited ,官方文档地址 网上介绍的很多方法有些过时了,有些不科学,调用起

  • Java生成读取条形码和二维码的简单示例

    条形码 将宽度不等的多个黑条和白条,按照一定的编码规则排序,用以表达一组信息的图像标识符 通常代表一串数字 / 字母,每一位有特殊含义 一般数据容量30个数字 / 字母 二维码 用某种特定几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息 比一维条形码能存储更多信息,表示更多数据类型 能够存储数字 / 字母 / 汉字 / 图片等信息 可存储几百到几十KB字符 Zxing Zxing主要是Google出品的,用于识别一维码和二维码的第三方库 主要类: BitMatrix位图

  • 用Java生成二维码并附带文字信息

    一.引入依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId&

  • Java Spring boot实现生成二维码

    目录 一.引入springboot依赖: 二.工具类代码: 三.调用工具类生成二维码 1.将链接生成二维码图片并保存到指定路径 2.将链接生成二维码直接显示在页面 3.将以get请求传参链接生成二维码 总结 一.引入spring boot依赖: <!--引入生成二维码的依赖--> <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <groupId>co

  • Java使用opencv识别二维码的完整步骤

    目录 前言 OpenCV的安装 开发环境配置 识别二维码 总结 前言 OpenCV的全称是Open Source Computer Vision Library,它是一个跨平台的计算机视觉库,由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用.OpenCV本身由C++语言开发,但也具有各种其他语言的接口,并支持windows.linux.ios.android等各种操作系统.本文将介绍如何使用OpenCV与Java语言进行二维码识别. OpenCV的安装 目前Op

  • java创建二维码并赋予url链接的功能实现

    首先在pom文件中导入有关依赖 <dependency>     <groupId>com.google.zxing</groupId>     <artifactId>core</artifactId>     <version>3.3.0</version> </dependency>   <dependency>     <groupId>com.google.zxing</

  • Java番外杂谈之每天扫的二维码你了解它内含的信息吗

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

  • Java将微信和支付宝支付的个二维码合二为一的方法

    因公司需要将支付宝和微信的二维码合成一个,不管用户用支付宝扫还是微信扫都能打开对应的支付页面,在网上找了一些文章,很感谢各位大神的经验,我也记录下我是如何将两个二维码合二为一的~. 原理:支付宝或微信生成的二维码中本质都内嵌了一个url,在扫码时实际是定向去访问二维码中内嵌的url,这样我就可以将这个url指定到我的一个控制器,在控制器中判断是微信还是支付宝软件扫的,然后去唤醒各自的支付即可. 1.首先生成二维码: folderName:存储二维码图片的文件夹名 imageName:二维码图片名

  • Java实现微信公众号获取临时二维码功能示例

    本文实例讲述了Java实现微信公众号获取临时二维码功能.分享给大家供大家参考,具体如下: 我们做微信公众号开发时为了推广,可能需要服务端去生成公众号的临时二维码,然后再进行一定的图片合成操作,制作一张漂亮的推广海报.别人扫一下二维码进入关注公众号界面,点击关注我们可以拿到二维码里面的信息官网地址 记录一下获取临时二维码操作过程. 1.获取access_token 上一篇文章写了 就不赘述了: 2.根据access_token获取二维码ticket,获取到了二维码ticket就基本山是成功了: 3

  • 浅谈js二维码扫码登录是什么原理

    目录 二维码登录的本质 认识二维码 系统认证机制 扫描二维码登录的一般步骤 大概流程 二维码准备 扫描状态切换 状态确认 总结 前几天看了极客时间一个二维码的视频,写的不错,这里总结下 在日常生活中,二维码出现在很多场景,比如超市支付.系统登录.应用下载等等.了解二维码的原理,可以为技术人员在技术选型时提供新的思路.对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码,防止上当受骗. 二维码,大家再熟悉不过了 购物扫个码,吃饭扫个码,坐公交也扫个码 在扫码的过程中,大家可能会

  • 扫二维码自动跳转【java】详解

    这个帖子网上很多了,但是都是讲理论知识,我呢,喜欢搞代码.既然搞完了,就贴出来备忘一下,也可以分享一下. 重复理论步骤: 1.进入网站-生成UUID 2.跳转到二维码页面(二维码包含UUID) 3.二维码页面写一个js,自动请求服务器查询二维码是否被扫 4.服务器收到请求,查询,如果还没被扫,进入等待,先不返回结果 5.一旦被扫,立即返回结果,页面js收到响应,做后续处理 OK,步骤是这样的没错,不过有一点缺点,步骤3中如果请求超时怎么办. 这个微信web登录有示例,服务器被请求后,持续等待25

  • java实现二维码扫码授权登陆

    假设现在有2个设备,A设备需要扫码授权登陆,B设备是已经登陆了的设备.然后实现如下: 一.A设备生成生成二维码: A设备向服务器请求getLoginCode接口,这个接口根据请求的sessionId进行base64或其他加密方式进行加密,然后以此作为二维码的值,并将这个loginCode写到redis里,设置5分钟过期.然后将这个loginCode返回给A设备,A设备以此值来生成登陆的二维码. 二.B设备扫码授权 B设备来扫A设备的二维码的时候,携带二维码的值,请求授权登陆的接口scanConf

  • 扫二维码下载apk并统计被扫描次数

    需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一般我们用草料生成二维码,如果没有注册的话只能生成一个包含下载网址的静态码,没有统计功能,而且出了自己截图保存外,草料是不会保存你的二维码的. 如果注册草料后,可以选择生成活码.所谓活码,就是一个指向页面,然后通过这个指向页面,再到你的下载链接.这个指向页面内嵌了统计代码.你可以通过草料的统计功能,看你的二维码相关的扫描数据. 2.你的App下载地址,自己内嵌一个统计代码,这样来统计扫描数据,这样,你只要一个静态

  • Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二维码是微信搞起来的,当年微信扫码二维码登录网页微信的时候,感觉很神奇,然而,我们了解了它的原理,也就没那么神奇了.二维码实际上就是通过黑白的点阵包含了一个url请求信息.端上扫码,请求url,做对应的操作. 一般性扫码操作的原理 微信登录.支付宝扫码支付都是这个原理: 1. 请求二维码 桌面端向服务

  • Java实现的生成二维码统计扫描次数并转发到某个地址功能详解

    本文实例讲述了Java实现的生成二维码统计扫描次数并转发到某个地址功能.分享给大家供大家参考,具体如下: 需求: 近几天某个项目需要用户录入个自己的网址,然后系统需要根据用户的的网址生成二维码,然后用户可以拿着它给别人扫描,访问到他录入的网址,在这个过程中.我需要知道用户的二维码被扫描的次数,也就是后面根据其可以做一些扫描排名之类的. 思路: ① 先生成二维码,csdn已经有前辈写了,那么我就直接拿过来用了. ② 将用户的id,和用户录入的网址处理之后作为http get参数封装到二维码中,然后

  • java生成二维码并且给二维码添加logo

    java生成二维码,具体代码如下所示: package com.bus.wx.action.code; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import jav

随机推荐