由于很多同学还没有跟上前面系列课程的进度,因此,今天暂停课程,来讲一篇技术科普文:二维码里面到底是什么?
生活中,经常能够看到二维码,到处充斥着扫一扫,那么,究竟二维码里面是什么?能用二维码做什么?如何创建和使用?如何判断二维码是否安全?
二维码的本质
二维码就是根据某种约定的编码方式将一段文本信息转换为一个能够被解码识别的图片。
其本质就是一段文本信息。
既然是文本信息,可能是如下一些信息用途类别:
人的姓名/一个数字/一段文字/一个网址/一个验证码/一个订单ID/会员ID/优惠券编号/位置坐标/WiFi密码......
也就是可能是任意文本信息,除了有长度限制,没有其它限制。二维码最大数据含量大约是1850个字符。
那么关键点就是编码方式,到底什么是编码方式?
年纪稍大的人应该知道,在电话没有普及之前,都是用电报来传递信息。
电报就是将需要发送的文本信息,编码,通过无线电波发射,接收方接收后进行解码,翻译回原来的文本信息。
这里的无线电波和二维码是类似的。
密码加密也是一种编码方式
至于如何编码,编码之后变成了什么信息数据,这在不同的规则或约定方法下是不一样的。
举一个密码加密的例子:
h e l l o w o r l d
将每个字母替换为该字母在字母表中向后顺序移动5个位置的字母,碰到末尾则回到头部
结果如下:
m j q q t b t w q i
这里的字母表和数字5就是关键的钥匙,只有两者皆知道的情况下才能解码
但是这种加密方式有很大的弱点,因为字母的使用频率通过大数据是可以统计出来的,比如元音字母的概率会更大,如果得到一定量的加密后的信息,通过统计加密后的字母的使用频率,和原始使用频率进行对比,就容易发现对照关系,从而推算出加密的方法。
二维码的编码方式是公开的,是为了使用二维码的一方能够按照公开的编码方式进行逆向的解码。
二维码还有一个很好的特点,就是具有一定的容错能力。二维条码因穿孔、污损等引起局部损坏时,仍然可以正确得到识读,损毁面积达50%仍可恢复信息。这同样是根据编码规则从数学原理上进行保证。
所以大家经常看到二维码的正中间会放一个小图标,尽管占据了二维码的部分面积,但仍然可以正常识别出来。
二维码图片的编码原理
这里大概介绍一下QR Code这种二维码的编码规则:
位置探测图形,位置探测图形分隔符,定位图形:对二维码的定位使用,对于每个QR码来说,位置是固定的,大小规格有所差异
校正图形:如果规格确定,则校正图形的数量以及位置也确定
格式信息:用来表示该二维码的纠错级别,总共有L、M、Q、H四种,分别有不同的纠错率
版本信息:共有40种规格的矩阵(一般为黑白色),从21x21(版本1)到177x177(版本40),每种版本符号比前版本 每边增加4个模块。
数据和纠错码字:实际的二维码数据信息以及纠错码字(可以用于修正二维码损坏所带来的错误)。
简要的编码过程:
1.数据分析:确定编码的字符类型,然后按对应的字符集转换成符号字符;
2.数据编码:将数据字符转换为位流,每8位一个码字,整体构成一个数据的码字序列。
3.纠错编码:将码字序列分块,根据纠错等级和分块的码字,产生纠错码字,并把纠错码字加入到数据码字序列后面,成为一个新的序列。
4.构造最终数据信息:在规格确定的条件下,将上面产生的序列按次序放到分块中
5.构造矩阵:将探测图形、分隔符、定位图形、校正图形和码字模块放入矩阵中。
6. 掩摸:将掩摸图形用于符号的编码区域,使得二维码图形中的深色和浅色(黑色和白色)区域能够比率最优的分布。
7. 格式和版本信息:生成格式和版本信息放入相应区域内。
以上仅仅是最简单的说明,真正的编码还有很多的细节,以及对应的数学计算公式和规则,具体信息,做程序的时候再去搜索相关的信息吧。
能用二维码做什么
其实应该说,能用一段文本信息做什么,二维码就能做什么。
关键不在于二维码,而在于如何定义这段文本信息,约定好文本信息的用途,二维码只是一种编码方式,便于通过设备用程序识别而已。
下面就是一些常见用途:
信息获取(名片、地图、WIFI密码、资料)
网站跳转(跳转到微博、手机网站、网站)
广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
手机电商(用户扫码、手机直接购物下单)
防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
优惠促销(用户扫码,下载电子优惠券,抽奖)
会员管理(用户手机上获取电子会员信息、VIP服务)
手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)
如何创建一个二维码图片
如果掌握了二维码的编码方式,是可以通过纸和笔将二维码图片画出来的,就是太麻烦了
一般是通过编写计算机程序的方式将文本信息编码为一个二维码图片
如果普通人不会编写计算机程序,那么就只能利用别人编写好的程序了
网上有很多网站,提供在线生成二维码的功能
具体是哪些,这里就不说了,大家用关键字【二维码生成】到某著名搜索引擎去搜索
一般在左侧输入一段文字,点击生成按钮,右侧就会看到生成好的二维码图片了
如何使用一个二维码图片
生成一个二维码图片后,可以印刷出来,也可以用图片文件传输给别人的方式来进行使用
使用方最重要的是需要一个程序来扫描分析图片,将里面的信息进行解码程序处理,翻译出原始的文本信息
得到里面的文本信息之后,再看该信息是用于什么用途的
一般发布这个图片的时候会附带详细说明该二维码的的用途
那么根据要求,采用对应的软件进行相应的处理
例如,最常见的,扫描一个二维码,显示一个微信公众号的主页,可以关注这个微信公众号
那么这个对应的软件就是微信App,它会进行拍照扫描解码,然后根据约定的规则,拿到一个微信公众号的唯一ID,然后去服务器获取这个微信公众号的相关信息,显示在App中,并提供关注等功能
所以,仅有二维码图片是远远不够的,还需要相应的约定用途说明,以及对应的处理软件。
如何判断二维码是否安全
经常有听到新闻说,某人扫了一个二维码,然后银行里的钱或者账户里的钱就被扣掉了,听起来蛮吓人的,要如何避免这种情况呢
一般来说,二维码图片本质就是一段文本信息,从原理上说,一段文本信息是没有能力进行任何处理的
最大的可能就是这段文本信息可能是一个恶意网站的网址,或者是一个恶意软件的下载网址
只有我们不去访问这个网站,或者下载这个软件,或者不安装这个软件,是不会受到伤害的
所以,在按照对方要求扫码之前,建议去下载一个专门扫描二维码的安全软件,它只有扫码功能,只能显示出二维码里面的信息给你看,即不能安装程序,也不会去访问网址,我们先看看里面是什么文本信息,然后再结合其它周边信息来判断是否足够安全。这种扫码软件应该还是有很多多,具体大家自己搜索一下。
最后说明一点,安全是多方面,多重手段来保护的,二维码仅仅只是一个工具。尽量注意以下一些原则:
1.不要泄漏验证码。
2.保护好自己的手机,如果手机遗失优先到手机运营商进行挂失。然后挂失相关信用卡或者银行卡。
3.不同网站或App的账号使用不同的密码,防止某一个系统被攻破之后,利用相同账号密码去撞库攻击其它系统。
4.收到不明信息,尽量先去网站搜索:关键字+骗子 试试看是否别人碰到同样的骗局或情况。
往期教程
因为教程是系列教程,前后关联性非常强,如果有希望每天花半小时,零基础学习编程的,请按照历史消息发布时间先后次序进行阅读。