日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

什么都需要二維碼,二維碼是什么原理( 三 )


生成二維碼的過(guò)程就是將信息轉(zhuǎn)換成二維碼的過(guò)程,掃碼的過(guò)程則是將二維碼再轉(zhuǎn)換成信息的過(guò)程,所以二維碼本質(zhì)上只是信息的一種展示形式而已 。二維碼結(jié)構(gòu)分析雖然二維碼看起來(lái)是毫無(wú)規(guī)律的,但其實(shí)二維碼的生成有著固定的格式 。大小二維碼的大小存在 40 種版本(Version),從Version1(21x21的正方形)到Version40(177x177的正方形),每增加一個(gè) Version,大小都會(huì)增加 4 。
版本越大二維碼就會(huì)越大,隨之所能表示的數(shù)據(jù)量也就越大 。結(jié)構(gòu)二維碼呈正方形,通常由黑白小方塊組成,二維碼的整體結(jié)構(gòu)可以分為定位標(biāo)記、功能區(qū)以及數(shù)據(jù)區(qū)三大部分:定位標(biāo)記——在二維碼的左上角、右上角、左下角有3個(gè)類似“回”字的方形圖案,這3個(gè)圖案是用于二維碼的定位標(biāo)記 。正因?yàn)橛卸ㄎ粯?biāo)記的存在,所以不管我們以什么角度掃描,二維碼總是可以被準(zhǔn)確的識(shí)別出來(lái) 。
二維碼中還存在一些小一點(diǎn)“回”字,它們是用于校正定位的標(biāo)記,并且只會(huì)在Version 2及以上版本的二維碼中才會(huì)出現(xiàn) 。功能區(qū)——功能區(qū)分為兩部分,即圖中紅色部分和紫色部分 。紅色部分存放格式信息,用于表示該二維碼的糾錯(cuò)級(jí)別(至于糾錯(cuò)級(jí)別是什么后面在解釋),紫色部分存放版本信息,即該二維碼的尺寸大小 。數(shù)據(jù)區(qū)——數(shù)據(jù)區(qū)指的是除去定位標(biāo)記和功能區(qū)的其他部分(圖中灰色部分),用于保存二維碼實(shí)際所表示的信息的數(shù)據(jù)碼以及用于糾錯(cuò)的糾錯(cuò)碼 。
糾錯(cuò)級(jí)別二維碼一般有一定的容錯(cuò)率,所以即使二維碼被遮擋住一部分,仍然可以被掃描出來(lái),原理就是在生成二維碼的過(guò)程中對(duì)數(shù)據(jù)做了冗余處理,冗余程度越高容錯(cuò)率就越高(糾錯(cuò)級(jí)別越高),二維碼能被遮擋的部分自然也就越多 。二維碼的糾錯(cuò)級(jí)別從低到高分為L(zhǎng)(7%)、M(15%)、Q(25%)、H(30%)4個(gè)等級(jí),如果需要在二維碼中間加logo,那么我們就應(yīng)該生成H級(jí)別的二維碼,但也并不是糾錯(cuò)級(jí)別越高越好,級(jí)別越高需要冗余的數(shù)據(jù)就越多,那么生成的二維碼的復(fù)雜程度也就越高,實(shí)際使用過(guò)程中我們應(yīng)該根據(jù)需求選擇合適的糾錯(cuò)級(jí)別 。
編碼模式我們都知道計(jì)算機(jī)只認(rèn)二進(jìn)制信息,所以我們需要把字符串中的數(shù)字、字母、漢字以及各種字符統(tǒng)一轉(zhuǎn)換成由0和1組成的二進(jìn)制數(shù)字串計(jì)算機(jī)才能識(shí)別,所以生成二維碼的過(guò)程就是將字符串轉(zhuǎn)換成二進(jìn)制數(shù)字串的過(guò)程 。最后生成的二進(jìn)制數(shù)字串對(duì)應(yīng)到二維碼上,0對(duì)應(yīng)白色的小方塊、1對(duì)應(yīng)黑色小方塊,按照8個(gè)一組依次填充到數(shù)據(jù)區(qū)就是一個(gè)完整的可以被識(shí)別的二維碼了 。
根據(jù)源字符串類型,二維碼主要支持4種標(biāo)準(zhǔn)化的編碼模式,分別為數(shù)字編碼、字符編碼、字節(jié)編碼以及日文編碼,當(dāng)然也支持其他一些特殊的字符集編碼以及混合編碼 。每種編碼模式對(duì)應(yīng)一個(gè)4位的二進(jìn)制的編碼模式指示符:下面以字符編碼舉個(gè)例子,現(xiàn)在有字符串“HELLO WORLD”1、模式指示符——根據(jù)查表可知HELLO WORLD需要使用字符編碼模式,所以它的模式指示符為0010 。
2、字符計(jì)數(shù)指示符——表示源字符串的長(zhǎng)度,字符計(jì)數(shù)指示符必須放在模式指示符之后 。字符計(jì)數(shù)指示符的計(jì)算依賴于二維碼的版本以及編碼模式:以版本1為例,字符編碼需要9bits,HELLO WORLD長(zhǎng)度為11,轉(zhuǎn)為二進(jìn)制為1011,不足9位,左邊補(bǔ)5個(gè)0得到最終結(jié)果000001011,加上模式指示符目前我們得到的二進(jìn)制數(shù)字串為0010 000001011 。
3、對(duì)原字符串編碼,將HELLO WORLD兩兩分組得到(H,E)、 (L,L)、(O, )、(W,O)、(R,L)、(D);根據(jù)索引表找到每個(gè)字符對(duì)應(yīng)的值,得到(17,14)、 (21,21)、(24,36)、(32,24)、(27,21)、(13);將每組數(shù)字先轉(zhuǎn)成45進(jìn)制、再將結(jié)果轉(zhuǎn)成長(zhǎng)度11的二進(jìn)制串,長(zhǎng)度不足的補(bǔ)0 。

推薦閱讀