二維碼的原理是怎樣的
二維碼是什么原理?不知道從什么時(shí)候開始,我們的生活突然之間就充滿了二維碼,看網(wǎng)頁(yè)要掃二維碼,加好友要掃二維碼,現(xiàn)在連樓下賣草莓的大爺都支持掃碼支付,那么,你有沒有想過(guò),這個(gè)長(zhǎng)得很奇怪的二維碼,到底是怎么來(lái)的呢?它的原理是什么?看完你就知道了
其實(shí)在介紹二維碼原理之前你可能已經(jīng)猜到了,二維碼就是把信息翻譯成黑白小方塊,然后填到這個(gè)大方塊里,這有點(diǎn)類似中學(xué)考試用的答題卡,就是把信息變成機(jī)器可掃描圖案,一秒鐘就能知道你得了多少分。當(dāng)然,二維碼的原理和答題卡還不太一樣,這個(gè)稍后會(huì)講到。
我們先來(lái)說(shuō)一下二維碼的哥哥----條形碼。也就是超時(shí)收銀員掃的那個(gè)黑白條,電腦在水平方向上識(shí)別粗細(xì)不均的黑白條,就能找出藏在其中的商品編號(hào)信息,相比于只在一個(gè)維度上攜帶信息的條形碼,“二維碼”在水平垂直兩個(gè)維度上都攜帶了信息,也就做成了方塊狀的樣子,條形碼和二維碼這一對(duì)好兄弟說(shuō)白了,其實(shí)就是給數(shù)字、字母、符號(hào)等這些字符換了一身衣服,把他們打扮成了能被手機(jī)相機(jī)識(shí)別的黑白條或塊。那么,最關(guān)鍵的問(wèn)題來(lái)了,這些字符,到底是怎么變成這種二維碼圖案的呢?
這就要提到一個(gè)人類具有劃時(shí)代意義的偉大發(fā)明“二進(jìn)制”。我們平時(shí)使用的數(shù)字。字符、漢字等各種字符,雖然畫風(fēng)完全不同,但是機(jī)智的人類發(fā)明了一個(gè)方法,使他們都可以被統(tǒng)一轉(zhuǎn)換成又0和1組成的二進(jìn)制數(shù)字序列,這個(gè)轉(zhuǎn)換的過(guò)程叫做編碼,國(guó)際上有幾套通用的編碼規(guī)則,我們今天就用一個(gè)例子來(lái)感受一下,編碼是怎么回事。比如AB這個(gè)由兩個(gè)英文字母組成的字符,根據(jù)編碼規(guī)則,每一個(gè)獨(dú)立的英文字母都有唯一一個(gè)十進(jìn)制數(shù)字與之對(duì)應(yīng),而像AB這樣的字符串則要在對(duì)應(yīng)數(shù)字的基礎(chǔ)上再做運(yùn)算,而運(yùn)算的結(jié)果再轉(zhuǎn)換成二進(jìn)制,就變成“000111001101”這樣的數(shù)字,哦對(duì)了,整個(gè)計(jì)算機(jī)和互聯(lián)網(wǎng)文明都是建立在這種二進(jìn)制編碼上的,你現(xiàn)在看得視頻,不管在你的電腦還是手機(jī)里,其實(shí)也只是一串0和1而以。
我們回到二維碼的生成原理上,字符在變成只有0和1組成的數(shù)字序列后,在進(jìn)行一系列優(yōu)化算法(此處自行腦補(bǔ)一系列優(yōu)化算法),就得到了最終的二進(jìn)制編碼。在最后的這串編碼中,一個(gè)0就對(duì)應(yīng)的是一個(gè)'白色小方塊',一個(gè)1就對(duì)應(yīng)的一個(gè)‘黑色小方塊’,我們把這些小方塊分成8個(gè)一組填進(jìn)大方塊里,這就是一個(gè)完整的、可以被手機(jī)相機(jī)識(shí)別的二維碼圖案了。
如果你要問(wèn)為什么所有二維碼角上有3個(gè)大方塊,其實(shí)這3個(gè)一模一樣的方塊是用來(lái)給收相機(jī)定位的,不信你就掃一掃,是不是不管正著掃、反著掃還是斜著掃結(jié)果都是一樣的?