第七週做業(軟件過程與項目管理)

二維碼

一直都對二維碼有很強烈的興趣,除了以爲方便快捷和安全之外,不知道爲何二維碼爲何這麼受歡迎;因此特意來學習一下二維碼的相關知識。html

http://coolshell.cn/articles/10590.html#jtss-tsina算法

http://suflow.iteye.com/blog/1100678shell

簡單地歸納一下就是:爲了生成一個二維碼,也就是稱爲Quick Response Code,簡稱爲QR Code.安全

英文就是有不少縮寫的東西要記住。佈局

而後分了不少步驟教了一堆知識:post


基礎ing

  1. 一個這樣的框
    qrcode的基本結構
    矩陣圖
    說到底仍是一個圖,而後就是各類表示位置、數據、版本的佈局咯,想一想也沒其它的東西須要了。學習

  2. 至於這樣的一個QR Code固然有大小:一共有40個尺寸,最小的尺寸從21x21,之後每一個尺寸只須要從前一個變長增長4就行了,balabala。。。學過數列都知道最大的是177x177的咯。ui


數據編碼ing

說了一堆的二維碼如今支持的編碼,由於誰也不知道之後支持多少編碼,嘻嘻。編碼

  • Numeric mode 數字編碼,從0到9 (這個最簡單,因此作事例就它了)
  • Alphanumeric mode 字符編碼。包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % * + – . / : 包括空格。
  • Byte mode, 字節編碼,能夠是0-255的ISO-8859-1字符。
  • Kanji mode 這是日文編碼,也是雙字節編碼。一樣,也能夠用於中文編碼。日文和漢字的編碼會減去一個值。

不就是中文編碼麼!!code

(如下是說着玩的)

  • Extended Channel Interpretation (ECI) mode 主要用於特殊的字符集。
  • Structured Append mode 用於混合編碼,也就是說,這個二維碼中包含了多種編碼格式。
  • FNC1 mode 這種編碼方式主要是給一些特殊的工業或行業用的。好比GS1條形碼之類的。
    爲了可以區別這些編碼,特地作了一張表來區別一下,同時也給出了不一樣的編碼模式下的單個編碼的2進制位數。
    編碼規範表

怎麼樣看着有什麼感受?暈不?不暈。好的後面還有,嘻嘻!


開始事例:
說清楚版本(version),和糾錯級別(這是開玩笑的吧),來作出相應的操做。
而後就是說要把01234567這數字分組
-> 轉成01串(二進制)
-> 串起來(搞燒烤呢!!!)
-> 把這些數的總個數8也用10個二進位的來表示往串起來的01串的前面串上
-> 多是嫌棄花樣不夠,還要在前面加上後接字符數的01串的編碼01串
-> 還不夠好看,在串後面加上結束01串。(還真會吃。)
-> 可能以爲串這樣很差,因此規定全部01必須是8的倍數。(否則美感不夠,好吧!真會吃)
-> 而後,(還有而後) 懼怕不夠吃因此必定要把竹籤給串滿了,不夠就日後面繼續加11101100 00010001這兩個串。(我服)


糾錯碼ing

  1. 給糾錯定個級別 好zb
級別 錯誤修正容量
L水平 7%的字碼可被修正
M水平 15%的字碼可被修正
Q水平 25%的字碼可被修正
H水平 30%的字碼可被修正
  1. 再給一張表關於怎麼把那些串給加工成小串。

定義表
定義表
這小串是什麼鬼?
爲了讓看上去高大上一些,還給出了表格:而這個表格是由Reed-Solomon error correction(裏德-所羅門糾錯算法)得出。

數據 對每一個塊的糾錯碼
1 1 67 85 70 134 87 38 85 194 119 50 6 18 6 103 38 213 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39
2 246 246 66 7 118 134 242 7 38 86 22 198 199 146 6 87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 133
2 1 182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7 148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141
2 70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236 235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 236

最終編碼ing

二維碼的混亂技術尚未玩完,它還要把數據碼和糾錯碼的各個codewords交替放在一塊兒。如何交替呢,規則:對於數據碼:把每一個塊的第一個codewords先拿出來按順度排列好,而後再取第一塊的第二個,如此類推。
。。。
不想再吐槽,結果就是這樣的:這就是咱們的最終一個長串的樣子了。竟然又全串起來了,這火星人的思惟果真不是這麼好理解的。
67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212, 173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154, 209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 236


畫二維碼ing

  1. 告訴你:這兩個死都不變的東西就是至關於烤叉和烤架的腳的
    Position Detection Pattern
    Alignment Pattern
  2. 怎麼放烤叉和烤架的腳表格:
    table
  3. 根據上述表格中的Version8的一個例子(6,24,42)開始烤一個。
    test
  4. 放鐵絲網
    Timing Pattern
  5. 固定鐵絲網
    Format Information
  6. 說明一下鐵絲網
    aa
  • 5個數據bits:其中,2個bits用於表示使用什麼樣的Error Correction Level, 3個bits表示使用什麼樣的Mask
  • 10個糾錯bits。主要經過BCH Code來計算
  1. 而後15個bits串要先與101010000010010開始烤了(作XOR操做)
    result
    燒烤也分等級
    等級表
  2. 開始準備放調料了,肯定放那種調料(Version Information)了。

resolt
填充結果

  1. 開始上剛剛折騰好久的串了。(數據和數據糾錯碼)

而後是填接咱們的最終編碼,最終編碼的填充方式以下:從左下角開始沿着紅線填咱們的各個bits,1是黑色,0是白色。若是遇到了上面的非數據區,則繞開或跳過。

填充效果

  1. 最後的最後,給烤好的01串作最後的樣子加工,好賣也好吃。大概也是加點醬油、孜然、蔬菜什麼的,嘻嘻(實際上是掩碼圖案:進行Masking操做)

操做就是和下面的圖片中的東西作一下最後的烘烤(xor)。
圖
過程


最後的

終於把這個二維碼給學懂了,不知道的時候好複雜,學完以後感受也不是很難的樣子。也許這就是:

世上無難事只怕有心人。

只要好好學也不是學不會,畢竟知識都是用來學習也應用的,只是不一樣的知識對咱們來講接受的能力不同,可是並不表明學不會,只是可能會多繞幾個彎,多話點時間。不氣餒,老是能學到想學的知識技能的,嘻嘻。

附加思惟導圖一份

相關文章
相關標籤/搜索