目前最常用的QR碼是由日本汽車公司Denso Wave的 Hara于1994年發(fā)明的。這種QR碼被命名為Quick code,縮寫(xiě)為qr碼。
因?yàn)槲覀冎皇谴蟾帕私庖幌略恚圆簧婕笆止び?jì)算二維碼。 畢竟第一步屏蔽需要進(jìn)行大量的異或運(yùn)算,這對(duì)于人類手工計(jì)算來(lái)說(shuō)是相當(dāng)困難的。
更具體的內(nèi)容可以查看iso 18004文件
二維碼的結(jié)構(gòu)
三個(gè)顯眼的大方塊稱為尋象圖形。 事實(shí)上,一些二維碼還可能隱藏著小方塊(最小的二維碼中沒(méi)有),稱為校正圖形。 另外,內(nèi)緣有黑白線連接相鄰的兩個(gè)取景圖形,稱為定位圖形。 最后,三個(gè)取景圖(左上取景圖兩側(cè)各一行,右上取景圖下側(cè),右上取景圖右側(cè)各一行)旁邊會(huì)有一些格式信息。左下尋像圖):
二維碼解碼-.jpg
剩余的淺綠色區(qū)域適合存儲(chǔ)數(shù)據(jù)和糾錯(cuò)碼。
值得一提的是,對(duì)于較大的二維碼,即校正圖案有6個(gè)及以上時(shí),右上圖搜索圖案左邊三行和左下圖上方三行會(huì)有版本信息搜索模式。 事物,破譯時(shí)也應(yīng)避開(kāi)這些地點(diǎn):
二維碼解碼-.jpg
二維碼的信息量和版本
QR 碼有 40 個(gè)版本。 版本號(hào)越大,可以容納的數(shù)據(jù)量越大。
版本 1 至 40 在水平和垂直方向上以 4 為增量。
最小版本尺寸為21x21
最大版本大小為
最大的二維碼,使用最小的糾錯(cuò)碼,可以存儲(chǔ)7089個(gè)數(shù)字和1819個(gè)漢字。
因此,對(duì)于普通的二維碼來(lái)說(shuō),往往保存一篇文章是不夠的,所以會(huì)存儲(chǔ)一些簡(jiǎn)單的配置信息或者URL。
如果用來(lái)存儲(chǔ)二進(jìn)制文件二維碼解碼器,它只能存儲(chǔ)3kb左右的大小,所以用它來(lái)存儲(chǔ)圖像或音頻是不現(xiàn)實(shí)的。
使用二維碼傳輸文件并不實(shí)用。 3kb太小了,不足以寫(xiě)一篇文章。 也許結(jié)合其他壓縮算法,比如zip,可以增加存儲(chǔ)內(nèi)容……
二維碼解碼-.png
稍微在中間
二維碼解碼-.png
二維碼解碼過(guò)程
二維碼解碼-.png
0. 尋像圖形
三個(gè)角的三個(gè)方形取像圖案是一個(gè)特殊的設(shè)計(jì)。 一方面,它們與其他常見(jiàn)模式不同,以防止誤讀。 取像圖案的另外三個(gè)方塊剛好可以確定二維碼的矩形邊界和起始位置(保留一角)
這三個(gè)圖形的長(zhǎng)、寬、大小都是固定的。
1.格式信息( )
格式信息位于第一個(gè)角,位于尋像方塊的兩側(cè),共15位。
二維碼解碼-.png
右側(cè)和下方的另外兩個(gè)尋像方塊是作為備份的重復(fù)信息。
這 15 位包括:
? 5 個(gè)數(shù)據(jù)位:2 位用于指示使用何種Error Level,3 位用于指示使用何種Mask。
? 10個(gè)糾錯(cuò)位。主要通過(guò)BCH Code計(jì)算
2.摘下面罩
一般情況下,二維碼是無(wú)法直接讀取的。 他們通常都戴著面具。
因?yàn)槲雌帘蔚亩S碼可能存在大量連續(xù)的白塊或連續(xù)的黑塊,不利于機(jī)器識(shí)別。 (尋像塊更容易識(shí)別)
使用遮蔽后,可以打亂黑白塊的分布,使二維碼更容易識(shí)別。
掩模圖案共有以下 8 種。 編碼時(shí),算法將計(jì)算哪個(gè)掩碼產(chǎn)生更合適的分布并選擇它。
二維碼解碼-mask-.png
在步驟1中二維碼解碼器,我們從格式信息中找到所使用的掩碼的編號(hào)。
那么我們只需要使用對(duì)應(yīng)的掩碼對(duì)數(shù)據(jù)區(qū)進(jìn)行異或運(yùn)算即可,非數(shù)據(jù)區(qū)不會(huì)發(fā)生變化。
如果摘下口罩后使用“掃一掃”掃描二維碼,會(huì)發(fā)現(xiàn)無(wú)法掃描出來(lái)。
3.確定編碼方式和大小
二維碼中黑色為1,白色為0
二維碼的讀取從右下角(沒(méi)有圖像搜索圖案的角)開(kāi)始,以 Z 形圖案向上讀取。
前4位是編碼方式,后面8位是編碼長(zhǎng)度。
編碼長(zhǎng)度的位數(shù)與QR碼的大小有關(guān)。 當(dāng)QR碼達(dá)到一定大小時(shí),編碼長(zhǎng)度也會(huì)有所不同,比如變成16位……
二維碼解碼-長(zhǎng)度和編碼方式-.jpg
總共有以下幾種模式。
二維碼解碼-編碼方式-.png
不同模式有不同容量
二維碼解碼-不同編碼方式的能力-.png
4.開(kāi)始解碼
總之,按照下圖,跳過(guò)中間的小方塊和格式信息等非數(shù)據(jù)區(qū)域。
二維碼解碼-解碼路線-.png
根據(jù)上一步確定的不同編碼方式進(jìn)行分析。
5. 糾錯(cuò)碼
QR碼中共有4個(gè)級(jí)別(Error Code Level)的糾錯(cuò)碼。
糾錯(cuò)能力
L級(jí)
7%的字符可以被糾正
M級(jí)
15%的字符可以修正
Q等級(jí)
25%的字符可以被糾正
H級(jí)
30%的字符可以修正
QR碼的糾錯(cuò)碼采用Reed-糾錯(cuò)算法。
即rar壓縮添加冗余校驗(yàn)信息似乎就是這種算法。
讀取數(shù)據(jù)時(shí),可以利用這些冗余代碼進(jìn)行驗(yàn)證。
因此,即使二維碼部分損壞,仍然可以正確讀取。
另外,如果用手擋住中間部分,可能不會(huì)影響閱讀,因?yàn)殚喿x順序是從右下角開(kāi)始的。 如果數(shù)據(jù)量不大的話,可能會(huì)在右邊讀取......