博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维码总结
阅读量:6800 次
发布时间:2019-06-26

本文共 2584 字,大约阅读时间需要 8 分钟。

二维码的总结


马上又要准备面试了,想起自己两年前应聘锤子科技的时候,和人家聊项目的时候被人家一聊就死。此情此景依然历历在目,于是打算沉下心来看看简单的二维码,一看发现这里面的知识点还真不少,今天就来总结一下其中的知识点。其实主要分为两类:

  • 二维码生成原理
  • 二维码解析流程分析
  • 二维码功能分析

一、二维码生成原理

二维码的生成原理主要涉及以下几个概念:

  1. 二维码的定位图案
  • Position Detection Pattern 标记二维码矩形的大小,只有三个,因为三个点确定一个矩形
  • Timing Patterns 定位矩形位置的基准线,根据 Position Detection Pattern 三个点得到的两条基准线
  • Alignment Patterns 定位需要的小矩形,只有二维码版本在2以上才能使用
  1. 二维码功能性数据
  • Error Correction Level 纠错级别
  • Masking 操作模式(有八种操作模式)
  • 纠错码 通过BCH Code 计算得来 上面三个数据最终还需要与101010000010010做XOR操作。这样就保证不会因为我们选用了00的纠错级别和000的Mask,从而造成全部为白色,这会增加我们的扫描器的图像识别的困难。
  • Version Information 在 >= Version 7以上,需要预留两块3 x 6的区域存放一些版本信息。
  1. 数据码
  • 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条形码之类的。
  • 结束符 占位
  • 补齐符 占位
  1. 纠错码 Error Correction Code Level,二维码中有四种级别的纠错,这就是为什么二维码有残缺还能扫出来,也就是为什么有人在二维码的中心位置加入图标。 | 错误修正容量 | | | ------ | ------ | | L水平 | 7%的字码可被修正 |
    | M水平 | 15%的字码可被修正 |
    | Q水平 | 25%的字码可被修正 |
    | H水平 | 30%的字码可被修正 |

数据码和纠错码并非简单的排列在一起,而是进行了一系列复杂计算,详情见链接:


二、二维码解析流程分析

  1. 定位图形:首先寻找探测图形,就是二维码上的三个方块。这三个方块的作用就是不管在哪个方向扫描图形,都可以扫到,不信可以将手机翻转测试一下。在通过二维码上的定位图形和分隔符确定二维码信息的图像。定位图形确定二维码符号中模块的坐标,二维码中的模块都是固定的,包括校正图形,版本信息,数据和纠错码。分隔符呢,就是将探测图形与二维码信息图像分开。
  2. 灰度化二维码信息像素:手机拍到的图像都是彩色的,所以拍摄到二维码也不列外,它也是彩色的,只不过除了黑白,其他颜色非常浅而已。灰度化是指通过颜色的深浅来识别二维码,就是说颜色深的按深灰处理,浅色的按浅灰处理,去掉其他颜色。
  3. 去掉二维码信息像素的噪点:相机的传感器在把光线作为接收信号和输出过程产生的粗糙像素,这些粗糙的像素是照片中不应该出现的干扰因素。噪点就是指这些粗糙的像素。
  4. 二值化二维码信息像素:二值化是说将图像上像素灰度值设置为0或者255,也就是变成只有黑白两种颜色。第一步已经灰度化变成只有深灰和浅灰两种颜色,现在二值化是将深灰变成黑色,浅灰变成白色。为什么变成黑白色呢。因为二维码图像其实是由二进制的0或者1组成,0代表白色,1代表黑色。二维码在二值化时会将二维码图像变成只有黑白色的条码,然后根据解析公式什么的(因为像素是0-255之间,要全部转变成0或者255,估计得经过一些计算,然后0就是0,255变为1)转化成二进制信息。
  5. 二维码译码和纠错:将得到的二进制信息进行译码和纠错。得到的二进制信息是版本格式信息、数据和纠错码经过一定的编码方式生成的,所以译码是对版本格式信息,数据和纠错码进行解码和对比。纠错是和译码同时进行的,将数据进行纠错。
  6. 获取到最终数据。

三、二维码功能分析

按二维码类别划分:

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服务)
  • 手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付)

转载地址:http://wjywl.baihongyu.com/

你可能感兴趣的文章
从文件路径中获取文件名的方法
查看>>
关于Recycle Bin是什么以及实验
查看>>
linux php redis 环境配置
查看>>
Android图形显示系统——上层显示1:界面绘制大纲
查看>>
EDB PPAS的"坑" 不兼容PostgreSQL一例
查看>>
"proxy_pass" cannot have URI part in location given by regular expression
查看>>
ExtJS5学习之Grid与Grid之间的数据拖拽
查看>>
后退时保存表单状态
查看>>
poj 2528 Mayor's posters(线段树+离散化)
查看>>
《Spring 3.X 企业应用开发实战》摘记 【持续更新】
查看>>
【linux 】路由配置命令
查看>>
7. 数据库函数
查看>>
win8 开发之旅(6) --五子棋游戏开发
查看>>
Python的win32serviceutil之疑似BUG
查看>>
动画绘制水波纹
查看>>
安装xenomai的记实
查看>>
梦幻星空动画
查看>>
用Easing函数实现碰撞效果
查看>>
Python简介
查看>>
泛函编程(13)-无穷数据流-Infinite Stream
查看>>