博客專欄

EEPW首頁 > 博客 > 二維碼究竟是怎么被掃出來的

二維碼究竟是怎么被掃出來的

發(fā)布人:電巢 時(shí)間:2022-11-27 來源:工程師 發(fā)布文章
image.png


我們每天都會掃大量的二維碼,乘坐地鐵需要掃描二維碼、付款時(shí)需要掃描二維碼,那你有沒有想過,二維碼到底是怎么被識別出來的呢?

image.png


雖然每一個(gè)二維碼都是不同的樣子,但它們本質(zhì)上都是由無數(shù)個(gè)黑色小方塊和白色小方塊組成。二維碼雖然看起來就是一坨正方形的東西,但實(shí)際上我們可以根據(jù)它們的功能將其分別理解為定位區(qū)、儲存區(qū)以及格式區(qū),我們用不同的顏色將它們區(qū)分開來。如下圖。

image.png


首先是定位區(qū)由三個(gè)大的方塊兒,以及兩條與其他區(qū)域藏在一起的直線組成。無論是二維碼內(nèi)儲存的任何信息,手機(jī)在照射到二維碼時(shí),首先便通過識別這三個(gè)方塊進(jìn)行定位,確定二維碼的范圍和方向。通過定位之后,我們無論用任何角度去掃機(jī)器,都能對二維碼進(jìn)行準(zhǔn)確的識別。

除去定位區(qū),剩下的部分全部由造型規(guī)整的黑白方塊組成,就是數(shù)據(jù)儲存的區(qū)域。在這里,我們就要提一下二進(jìn)制。我們都知道在計(jì)算機(jī)上所有的信息都由數(shù)字0和1交替組成。而在二維碼中黑色小方塊代表了1,白色小方塊代表了0。數(shù)據(jù)信息在不同的編碼規(guī)則中,按照著0和1交替組成。假如在使用的二進(jìn)制編碼,中英文數(shù)字O的二進(jìn)制排列是01001111。那么在二維碼中就有一個(gè)白色方塊,一個(gè)黑色方塊,兩個(gè)白色方塊和四個(gè)黑色方塊依次組成。手機(jī)對著一掃以八個(gè)方塊為主,由右下角開始依次讀取,并把這些黑白方塊轉(zhuǎn)換為0和1。再將其識別為二進(jìn)制數(shù)字序列,然后進(jìn)行編碼,便能知道二維碼中的信息了。當(dāng)然這只是一個(gè)簡單的原理,具體實(shí)際應(yīng)用中整個(gè)識別的運(yùn)算過程會更加復(fù)雜一些。

image.png


說到這,二維碼中的信息就被提取出來了。我們剛剛還提到一個(gè)格式區(qū),這是干什么的呢?實(shí)際在識別方面呢,二維碼還包含了一定的容錯(cuò)機(jī)制。數(shù)據(jù)序還可以做更細(xì)的劃分,將其中一部分劃出來作為容錯(cuò)區(qū)域。當(dāng)二維碼出現(xiàn)破損和遮擋時(shí),容錯(cuò)區(qū)的數(shù)據(jù)備份便可以作為補(bǔ)充輔助識別。而根據(jù)容錯(cuò)區(qū)域的大小,我們可以將二維碼的容錯(cuò)等級分為四級,大小由7%到30%不等,區(qū)域越大,容錯(cuò)率自然越高。儲存區(qū)域也會相應(yīng)減小,而這個(gè)容錯(cuò)等級就被藏在了格式區(qū)內(nèi)。那么在識別前,機(jī)器就需要先對格式區(qū)進(jìn)行掃描。了解到二維碼的容錯(cuò)等級后,再對內(nèi)容進(jìn)行準(zhǔn)確識別。

image.png


image.png


除此之外,二維碼還根據(jù)大小分為了四十個(gè)不同的版本,不同的大小可以包含的數(shù)據(jù)多少也不盡相同。在格式區(qū)內(nèi)也包含了二維碼大小的版本信息。機(jī)器在識別前也會對這一部分提前掃描識別。在實(shí)際應(yīng)用中,二維碼的識別順序是按照定位去進(jìn)行定位,格式去預(yù)識別二維碼信息,最后在儲存區(qū)讀取二維碼數(shù)據(jù)的順序進(jìn)行的。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



關(guān)鍵詞: 二維碼

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉