二维码的总结
马上又要准备面试了,想起自己两年前应聘锤子科技的时候,和人家聊项目的时候被人家一聊就死。此情此景依然历历在目,于是打算沉下心来看看简单的二维码,一看发现这里面的知识点还真不少,今天就来总结一下其中的知识点。其实主要分为两类:
- 二维码生成原理
- 二维码解析流程分析
- 二维码功能分析
一、二维码生成原理
二维码的生成原理主要涉及以下几个概念:
- 二维码的定位图案
- Position Detection Pattern 标记二维码矩形的大小,只有三个,因为三个点确定一个矩形
- Timing Patterns 定位矩形位置的基准线,根据 Position Detection Pattern 三个点得到的两条基准线
- Alignment Patterns 定位需要的小矩形,只有二维码版本在2以上才能使用
- 二维码功能性数据
- Error Correction Level 纠错级别
- Masking 操作模式(有八种操作模式)
- 纠错码 通过BCH Code 计算得来 上面三个数据最终还需要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。
- Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
- 数据码
- Numeric mode 数字编码,从0到9。
- Alphanumeric mode 字符编码。包括 0-9,大写的A到Z(没有小写),以及符号$ % * + – . / : 包括空格。
- Byte mode, 字节编码,可以是0-255的ISO-8859-1字符。
- Kanji mode 这是日文编码,也是双字节编码。同样,也可以用于中文编码。
- Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集。
- Structured Append mode 用于混合编码,也就是说,这个二维码中包含了多种编码格式。
- FNC1 mode 这种编码方式主要是给一些特殊的工业或行业用的。比如GS1条形码之类的。
- 结束符 占位
- 补齐符 占位
- 纠错码 Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。 | 错误修正容量 | | | ------ | ------ | | L水平 | 7%的字码可被修正 | | M水平 | 15%的字码可被修正 | | Q水平 | 25%的字码可被修正 | | H水平 | 30%的字码可被修正 |
数据码和纠错码并非简单的排列在一起,而是进行了一系列复杂计算,详情见链接:
二、二维码解析流程分析
- 定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。
- 灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。
- 去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。
- 二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。
- 二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。
- 获取到最终数据。
三、二维码功能分析
按二维码类别划分:
1D product | 1D industrial | 2D |
---|---|---|
UPC-A | Code 39 | QR Code |
UPC-E | Code 93 | Data Matrix |
EAN-8 | Code 128 | Aztec (beta) |
EAN-13 | Codabar | PDF 417 (beta) |
ITF | MaxiCode | |
RSS-14 | ||
RSS-Expanded |
按扫码结果划分:
- AddressBookResultHandler 通讯录地址
- CalendarResultHandler 日历条目
- EmailAddressResultHandler 电子邮件地址
- GeoResultHandler 地理坐标
- ISBNResultHandler 图书编号
- ProductResultHandler 非图书产品信息
- SMSResultHandler 短信内容
- TelResultHandler 电话号码
- TextResultHandler 文本内容
- URIResultHandler 网络连接
- WifiResultHandler WiFi接入信息
按业务划分:
- 信息获取(名片、地图、WIFI密码、资料)
- 网站跳转(跳转到微博、手机网站、网站)
- 广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
- 手机电商(用户扫码、手机直接购物下单)
- 防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
- 优惠促销(用户扫码,下载电子优惠券,抽奖)
- 会员管理(用户手机上获取电子会员信息、VIP服务)
- 手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)