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

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

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

首先是定位區由三個大的方塊兒,以及兩條與其他區域藏在一起的直線組成。無論是二維碼內儲存的任何信息,手機在照射到二維碼時,首先便通過識別這三個方塊進行定位,確定二維碼的范圍和方向。通過定位之后,我們無論用任何角度去掃機器,都能對二維碼進行準確的識別。
除去定位區,剩下的部分全部由造型規整的黑白方塊組成,就是數據儲存的區域。在這里,我們就要提一下二進制。我們都知道在計算機上所有的信息都由數字0和1交替組成。而在二維碼中黑色小方塊代表了1,白色小方塊代表了0。數據信息在不同的編碼規則中,按照著0和1交替組成。假如在使用的二進制編碼,中英文數字O的二進制排列是01001111。那么在二維碼中就有一個白色方塊,一個黑色方塊,兩個白色方塊和四個黑色方塊依次組成。手機對著一掃以八個方塊為主,由右下角開始依次讀取,并把這些黑白方塊轉換為0和1。再將其識別為二進制數字序列,然后進行編碼,便能知道二維碼中的信息了。當然這只是一個簡單的原理,具體實際應用中整個識別的運算過程會更加復雜一些。

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


除此之外,二維碼還根據大小分為了四十個不同的版本,不同的大小可以包含的數據多少也不盡相同。在格式區內也包含了二維碼大小的版本信息。機器在識別前也會對這一部分提前掃描識別。在實際應用中,二維碼的識別順序是按照定位去進行定位,格式去預識別二維碼信息,最后在儲存區讀取二維碼數據的順序進行的。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。