二維碼的總結
立刻又要準備面試了,想起本身兩年前應聘錘子科技的時候,和人家聊項目的時候被人家一聊就死。此情此景依然歷歷在目,因而打算沉下心來看看簡單的二維碼,一看發現這裏面的知識點還真很多,今天就來總結一下其中的知識點。其實主要分爲兩類:html
- 二維碼生成原理
- 二維碼解析流程分析
- 二維碼功能分析
1、二維碼生成原理
二維碼的生成原理主要涉及如下幾個概念:面試
- 二維碼的定位圖案
- 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%的字碼可被修正 |
數據碼和糾錯碼並不是簡單的排列在一塊兒,而是進行了一系列複雜計算,詳情見連接:二維碼的生成細節和原理網絡
2、二維碼解析流程分析
- 定位圖形:首先尋找探測圖形,就是二維碼上的三個方塊。這三個方塊的做用就是無論在哪一個方向掃描圖形,均可以掃到,不信能夠將手機翻轉測試一下。在經過二維碼上的定位圖形和分隔符肯定二維碼信息的圖像。定位圖形肯定二維碼符號中模塊的座標,二維碼中的模塊都是固定的,包括校訂圖形,版本信息,數據和糾錯碼。分隔符呢,就是將探測圖形與二維碼信息圖像分開。
- 灰度化二維碼信息像素:手機拍到的圖像都是彩色的,因此拍攝到二維碼也不列外,它也是彩色的,只不過除了黑白,其餘顏色很是淺而已。灰度化是指經過顏色的深淺來識別二維碼,就是說顏色深的按深灰處理,淺色的按淺灰處理,去掉其餘顏色。
- 去掉二維碼信息像素的噪點:相機的傳感器在把光線做爲接收信號和輸出過程產生的粗糙像素,這些粗糙的像素是照片中不該該出現的干擾因素。噪點就是指這些粗糙的像素。
- 二值化二維碼信息像素:二值化是說將圖像上像素灰度值設置爲0或者255,也就是變成只有黑白兩種顏色。第一步已經灰度化變成只有深灰和淺灰兩種顏色,如今二值化是將深灰變成黑色,淺灰變成白色。爲何變成黑白色呢。由於二維碼圖像實際上是由二進制的0或者1組成,0表明白色,1表明黑色。二維碼在二值化時會將二維碼圖像變成只有黑白色的條碼,而後根據解析公式什麼的(由於像素是0-255之間,要所有轉變成0或者255,估計得通過一些計算,而後0就是0,255變爲1)轉化成二進制信息。
- 二維碼譯碼和糾錯:將獲得的二進制信息進行譯碼和糾錯。獲得的二進制信息是版本格式信息、數據和糾錯碼通過必定的編碼方式生成的,因此譯碼是對版本格式信息,數據和糾錯碼進行解碼和對比。糾錯是和譯碼同時進行的,將數據進行糾錯。
- 獲取到最終數據。
3、二維碼功能分析
按二維碼類別劃分:測試
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服務)
- 手機支付(掃描商品二維碼,經過銀行或第三方支付提供的手機端通道完成支付)