趣知識:二維碼為何損毀一部分也能掃描(前)

作者的前言

大家好啊,歡迎進入我的文章啊。今天開了個新坑:趣知識

好久沒有更新文章,昨天打開簡書才發(fā)現(xiàn),我漲粉了。

我也算個簡書的新人,距離上上個文章更新也是2019年了。

希望大家給我一個鼓勵,求看完,求評論。

就這些,進入正題吧!


正文:二維碼的前身——條形碼

首先你至少要知道這些碼的都表示二進制數(shù)(0與1),這些二進制數(shù)在掃描時會轉(zhuǎn)換成字符串。另外,里面的豎線表示1,空白表示0。

豎線和空白都有 4 種寬度。最細(xì)的豎線代表一個 1,之后是兩個 1,三個 1,最粗的豎線就是 4 個 1。對應(yīng)的,4 種間隔寬度就是 0、00、000、0000。

每 2 條豎線加 2 條間隔就能表示一個數(shù)字,條形碼的 48 條豎線和間隔就可以表示 12 位數(shù)字編號了。

而所有條形碼都有一個啟示碼和終止碼,它們都是一條豎線加一條空白加一條豎線(101)。它們有什么用呢?它可以確定條形碼的最細(xì)寬度(確定一個1或一個0的長度是多寬),這樣你把碼打印成多大、多小,機器都能知道你掃描的數(shù)據(jù)。

如果掃反了怎么辦?其實除了固定的啟示碼和終止碼,還有一個組合是固定的,哪就是在中間的中間碼,即01010。我們把中間碼左側(cè)的豎線里表里的白色變成黑色、黑色變成白色,放在分隔符右側(cè)的編碼。巧妙的地方在于,左側(cè)所有組合里黑色的個數(shù)都是奇數(shù) ,而右側(cè)都是偶數(shù)。

這樣,掃碼器從左往右讀取數(shù)據(jù)時只要發(fā)現(xiàn)一組數(shù)據(jù)里的 1 是偶數(shù),那么就可以確認(rèn)掃反了。用逆碼表解讀數(shù)字,再重新組合,就能得到正確編號。

最后,第十二位是根據(jù)前 11 位數(shù)計算出來的校驗碼,防止因為污漬而掃描成別的信息。

校驗碼公式:

回顧一下這種設(shè)計的好處:

1.起始碼確定了最細(xì)寬度

2.中間碼、把左邊相反的數(shù)放到右邊的組合防止了掃反的問題

3.校驗碼說明了數(shù)據(jù)無錯

雖然這三重設(shè)計保證了條形碼可以適應(yīng)各種復(fù)雜的現(xiàn)實情況,非??煽?。但是它承載的信息太少,只能存儲固定格式的數(shù)據(jù),而且弄上了污漬只能檢測出來,不能知道弄上污漬前的數(shù)據(jù)。畢竟超市的收銀員如果發(fā)現(xiàn)數(shù)據(jù)錯誤,也會自己手動輸物品編碼(一般條形碼下面都會打印物品編碼),這種碼運用的領(lǐng)域只能是超市,所以就出現(xiàn)了二維碼。


附件:條形碼的結(jié)構(gòu)表


條形碼結(jié)構(gòu)表



作者的后言

感謝你能看到這里,如果覺得文章不錯請看官們給個關(guān)注、給個贊,謝謝!

看官們一個舉動,都是我們最大的動力!


下期預(yù)告

趣知識:二維碼為何損毀一部分也能掃描(一)

QR二維碼校驗碼大升級、更厲害的位置確定系統(tǒng),讓我們一起來看看!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容