歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

跟我一起學習玩轉二維碼

來源:本站整理 作者:佚名 時間:2019-05-31 TAG: 我要投稿

有些時候二維碼被嚴重破壞導致無法掃描,促使我去學習了一波關于二維碼的知識。二維碼一共有40個尺寸。V 1是21 x 21的矩陣,V2是 25 x 25的矩陣,V3是29的尺寸,每增加一個等級,就會增加4的尺寸,公式是:(V-1)*4 + 21 最高V 40,(40-1)*4+21 = 177,所以最高是177 x 177 的正方形。
二維碼格式示例如下:

定位圖案
定位圖案,就是每個二維碼都有的左上、左下和右上三個角的“回”字形的標志。用于標記二維碼的矩形大小他的尺寸都是7*7的模塊。

功能性數據:存在于所有的尺寸中,用于存放一些格式化數據的,主要內容為“糾錯碼等級(3bit)+掩碼類別(2bit)+BCH code(10bit,用于糾錯)”,然后這15個bits還要與101010000010010做XOR操作,主要是為了如果選用了00的糾錯級別和000的Mask,從而造成全部為白色,這會增加掃描器的圖像識別的困難。比如:

  而這15個bit在format information區域內的分布如下:

  在 Version 7以上,需要預留兩塊3 x 6的區域存放一些版本信息。
 數據碼和糾錯碼
 除了上述的那些地方,剩下的地方存放 數據碼 和糾錯碼。就是最前面兩張圖的深灰色區域,一般數據都是從右下角開始填充,先填充數據碼,數據碼填充完畢之后再填充糾錯碼,以v1為例,數據的填充順序,是這樣的:

數據編碼
QR碼支持如下的編碼:
數字編碼:從0到9;
字符編碼:包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % * + – . / : 包括空格;
字節編碼:可以是0-255的ISO-8859-1字符;
日文編碼:也是雙字節編碼;
Extended ChannelInterpretation (ECI) mode 主要用于特殊的字符集。并不是所有的掃描器都支持這種編碼;
Structured Appendmode 用于混合編碼,也就是說,這個二維碼中包含了多種編碼格式;
FNC1 mode 這種編碼方式主要是給一些特殊的工業或行業用的。比如GS1條形碼之類的
下表是每個模式的編碼相對應的“編號”,這個編號,存在于format information區域。

因為種類較多較復雜,而且為了方便大家理解,我們在這里值選擇數字編碼和字符編碼舉例,其它的編碼,有興趣的同學可以查看官方文檔。示例一:
數字編碼,從0到9。如果需要編碼的數字的個數不是3的倍數,那么,最后剩下的1或2位數會被轉成4或7bits,則其它的每3位數字會被編成10位的二進制數,最后將這些二進制數據連接起來并在前面加上編碼模式的編號和字符計數指示符(就是表示了被編碼的信息有多少個字符),字符計數指示符的長度取決于編碼的模式和所要編成二維碼的版本,在數字編碼中,字符計數指示符如下表對應的有10、12或14位:

比如在Version 1的尺寸下,糾錯級別為H(糾錯級別我們會在下面講到)的情況下,我們要編碼: 01234567
(1)把上述數字分成三組: 012 345 67
(2)把他們轉成10bit二進制:  012 轉成 0000001100;345 轉成 0101011001;67 轉成1000011。
(3)把這三個二進制串起來: 0000001100 0101011001 1000011
(4)把數字的個數轉成二進制 (version 1-H是10 bits ): 8個數字的二進制是0000001000
(5)把數字編碼的標志0001和第4步的編碼加到前面:  0001 00000010000000001100 0101011001 1000011
示例二:
字符編碼(也叫字母數字編碼)。包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % *+ – . / : 包括空格。這些字符會映射成一個字符索引表。如下所示(兩個表,中英文對照):(其中的SP是空格,Char是字符,Value是其索引值),編碼的過程是把字符兩兩分組,然后轉成下表的45進制,然后轉成11bits的二進制,如果最后有一個落單的,那就轉成6bits的二進制。而字符計數指示符需要根據不同的Version尺寸編成9, 11或13個二進制(如上表)。


在V 1的尺寸下,糾錯級別為H的情況下,編碼: AC-42
(1)從字符索引表中找到 AC-42 這五個字條的索引 (10,12,41,4,2)
(2)兩兩分組: (10,12) (41,4) (2)
(3)把每一組轉成11bits的二進制:(10,12) 10*45+12 = 462 轉成 00111001110;(41,4)41*45+4 = 1849 轉成 11100111001;
(4)把這些二進制連接起來:00111001110 11100111001 000010

[1] [2] [3] [4] [5]  下一頁

【聲明】:黑吧安全網(http://www.fhetww.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        江西十一选五走势图爱彩乐