一直都對二維碼有很強烈的興趣,除了以爲方便快捷和安全之外,不知道爲何二維碼爲何這麼受歡迎;因此特意來學習一下二維碼的相關知識。html
http://coolshell.cn/articles/10590.html#jtss-tsina算法
http://suflow.iteye.com/blog/1100678shell
簡單地歸納一下就是:爲了生成一個二維碼,也就是稱爲Quick Response Code,簡稱爲QR Code.安全
英文就是有不少縮寫的東西要記住。佈局
而後分了不少步驟教了一堆知識:post
一個這樣的框
說到底仍是一個圖,而後就是各類表示位置、數據、版本的佈局咯,想一想也沒其它的東西須要了。學習
至於這樣的一個QR Code固然有大小:一共有40個尺寸,最小的尺寸從21x21,之後每一個尺寸只須要從前一個變長增長4就行了,balabala。。。學過數列都知道最大的是177x177的咯。ui
說了一堆的二維碼如今支持的編碼,由於誰也不知道之後支持多少編碼,嘻嘻。編碼
不就是中文編碼麼!!code
(如下是說着玩的)
怎麼樣看着有什麼感受?暈不?不暈。好的後面還有,嘻嘻!
開始事例:
說清楚版本(version),和糾錯級別(這是開玩笑的吧),來作出相應的操做。
而後就是說要把01234567這數字分組
-> 轉成01串(二進制)
-> 串起來(搞燒烤呢!!!)
-> 把這些數的總個數8也用10個二進位的來表示往串起來的01串的前面串上
-> 多是嫌棄花樣不夠,還要在前面加上後接字符數的01串的編碼01串
-> 還不夠好看,在串後面加上結束01串。(還真會吃。)
-> 可能以爲串這樣很差,因此規定全部01必須是8的倍數。(否則美感不夠,好吧!真會吃)
-> 而後,(還有而後) 懼怕不夠吃因此必定要把竹籤給串滿了,不夠就日後面繼續加11101100 00010001這兩個串。(我服)
級別 | 錯誤修正容量 |
---|---|
L水平 | 7%的字碼可被修正 |
M水平 | 15%的字碼可被修正 |
Q水平 | 25%的字碼可被修正 |
H水平 | 30%的字碼可被修正 |
這小串是什麼鬼?
爲了讓看上去高大上一些,還給出了表格:而這個表格是由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 |
二維碼的混亂技術尚未玩完,它還要把數據碼和糾錯碼的各個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
而後是填接咱們的最終編碼,最終編碼的填充方式以下:從左下角開始沿着紅線填咱們的各個bits,1是黑色,0是白色。若是遇到了上面的非數據區,則繞開或跳過。
操做就是和下面的圖片中的東西作一下最後的烘烤(xor)。
終於把這個二維碼給學懂了,不知道的時候好複雜,學完以後感受也不是很難的樣子。也許這就是:
世上無難事只怕有心人。
只要好好學也不是學不會,畢竟知識都是用來學習也應用的,只是不一樣的知識對咱們來講接受的能力不同,可是並不表明學不會,只是可能會多繞幾個彎,多話點時間。不氣餒,老是能學到想學的知識技能的,嘻嘻。