二維碼的原理是什麼?

隨小劉


二維碼是在一維碼的基礎上發展而來的,最常見的一維碼就是超市商品的條形碼,它將每種商品進行編號,用粗細不同的黑條相互組合來組成獨一無二的商品指紋,但是一維碼只能在同一個方向上進行編碼,各種組合的數量有限,因此才產生了二維碼。

二維碼可以在水平和豎直方向上進行編碼,用正方形的黑白格來記錄信息,原理是利用了二進制的0和1,打個比方,現在有一個10乘10格子的二維碼,每一行都有黑白格,如果用1表示白色的格子,0表示黑色的格子,那麼我們可以用類似“0100101100”這樣的一行數字來表示每一行的代碼,那麼將10個這樣的數字行排列起來,就組成了一個二維碼,我們掃碼就相當於解碼的過程,可以識別二維碼上的信息。二維碼還具有容錯性,一些二維碼只需要掃前面幾行就可以識別出信息,哪怕二維碼局部破損丟失都可能識別信息,不需要掃全,它比普通條形碼譯碼錯誤率50萬分之1還要低,誤碼率低於1000萬分之1。


科學薛定諤的貓


二維碼的原理可以分為生成原理和工作原理。

首先是生成原理:

該原理是,用特定的幾何圖形按編排規律在二維方向上分佈,採用黑白相見的圖形來記錄數據符號信息。

為了利用計算機內部邏輯,用數字“0”和數字“1”作為代碼,同時使用若干個與二進制相對應的幾何形體表示文字數值信息。

這裡面我有幾個小知識點想提一提。

知識點一:二維碼共有40個尺寸

也就是版本version,Version 1.0是21 x 21的正方形,Version 2.0是 25 x 25的(公式:(V-1)*4 + 21)。所以最大的尺寸就是177 x 177 的正方形。


知識點二:三個點確定一個面

二維碼只有三個角上有位置探測圖案,就是這個就是為了更好的讀取二維碼。那有人問為什麼不是四個能,這個角也不是多餘的,可以鑲嵌別的信息。

知識點三:旋轉二維碼,也可以識別

因為有知識點二中所說的位置探測圖案和分隔符,所以,無論是正著掃碼,還是豎著掃碼,或者斜著掃碼,信息都可以被識別。

再來看看,二維碼的工作原理:

通過常見的圖象輸入設備或光電掃描設備,它們可以自動讀取,並且會對識別出的信息進行自動處理。

因為每個碼制有自己的字符集,一個一個的字符佔據自己的位置。所以,通過掃描能讀取的數據信息在二維碼中的位置是由定位圖形和分隔符決定的。才能夠快速地識別和處理圖形旋轉、變化等問題。

這裡同樣有幾個有趣的小知識點。

首先,二維碼不但只有黑白色的,普遍使用黑白色是為了提高其工作效率。

其次,二維碼最早源於日本,但在我國被髮揚光大



鎂客網


二維碼的原理說簡單也簡單,就是把編碼的內容,用二維圖像的形式顯示出來;但說難也難,難在如何讓手機方便識別,如何即使有了汙損也能還原。

前者的原理:把編碼的內容,用二維圖像的形式顯示出來。其實我們已經做了幾千年了,繪畫、書寫,都是這樣的原理。所以沒有什麼稀奇的。二維碼最有意思的是他的困難之處。

(二維碼,不過掃不出來,因為少了一個定位點)

我們用手機掃描二維碼的時候,可不一定是正對著的。我們知道,根據透視的原理,我們拍到的東西基本上不是真正的正方形。這個時候,程序就要能還原回去。二維碼四周的三個大黑塊和一箇中型黑塊,就是輔助手機定位的。知道了這幾個點的位置,我們就能把二維碼還原成正方形。

還原成正方形之後,程序再將其中的0-1數據(黑白)識別出來,然後再解碼,就能獲得二維碼的內容了。

二維碼還需要能夠承受一定的汙損,這樣即便有一點瑕疵,也不妨礙我們使用。這就要求在編碼中要有一定的冗餘。比如把數據重複很多遍,這樣損壞一部分,仍然能知道全部的數據。


章彥博



二維碼是一種比一維碼更高級的一種條碼格式。一維碼只能在水平方向上表達信息,而二維碼在水平和垂直方向都可以存儲信息。一維碼只能由數字和字母組成,而二維碼能存儲漢字、數字和圖片等信息。二維條碼有一維條碼沒有的“定位點”和“容錯機制”,容錯機制在即使沒有辨識到全部的條碼、或是說條碼有汙損時,也可以正確地還原條碼上的信息。

常見的二維碼矩陣式二維條碼,是在一個矩形空間通過黑、白像素在矩陣中的不同分佈進行編碼。在矩陣相應元素位置上,用點的出現表示二進制“1”,點的不出現表示二進制的“0”,這樣的排列組合確定了矩陣式二維條碼所代表的意義。

二維碼的高密度編碼,信息容量大,常見的QR碼可容納多達1850個字母或2710個數字或1108個字節或500多個漢字。二維碼在最早1994年發明時,基本信息就是隻存放在二維碼內的,但現在的二維碼的用法多是互聯網應用,所以更多的是一個網址。

二維碼中需要三個定位點,可以理解方塊用於定位,三點確定一個面,可以幫助機器正確的解讀,用三個點是為了能夠讓傾斜條件下,也能閱讀並識別,三個點可以完整的定位一個正方形,這樣就能很容易確定數據範圍。所以二維碼看起來像個正方形,現在也有很多變異的二維碼,但我們常見的基本輪廓大都是正方形。


震長


來來來,極果君又來講課講了~

雖說二維碼的標準有很多,但現在說起它,基本上指的就是常見的QR碼。QR,代表了快速響應。拿起手機,對準,滴,所以叫QR。你應該注意到了,QR碼上有三個大的黑色方塊,有些中間還會被logo擋住一部分。

二維碼的原理是用黑色和白色的方塊來代表數據中的0和1,攝像頭識別出顏色和排列就能解讀出二維碼包含的信息。但這有個問題,方塊不分上下左右,換個方向去讀,程序還能認出原來的信息嗎?

能。

這靠的就是上面的三個大黑塊,他們在整個圖案中起到一個定位的作用。程序識別到這三個塊,就會意識到這是一個二維碼,並且會自動識別它的正確朝向:兩個黑塊在上,一個黑塊在左下。

有些朋友可能會問為什麼不是放四個,有這種想法的同學請自覺面壁( ͡° ͜ʖ ͡°)。

問為什麼不放倆的同學也去一起站好。


至於為什麼不放一個,其實並不是因為不可行,而是因為不夠可靠。你想啊,就一個定位標誌,萬一汙損了,這二維碼就讀不出來了對不對?

那中間擋住了一塊兒怎麼還能讀呢?


那是因為QR碼帶有糾錯功能,只要定位部分保持清晰,就算有部分區域被遮擋破壞也能保證正常還原數據。根據需求不同,糾錯一共有四級,分別能恢復7%到30%不等的數據量。這樣只要logo別太大,被擋住也沒問題啦。


極果網


二維碼在我們的生活中已經越來越不可代替,買個早點付個款,甚至追上喜歡的妹子要個微信,也都是展示出二維碼自己來掃一掃。但是這個天天見著的小黑白塊,為什麼就能讓你輸出金錢,勾搭妹子呢 ?

二維碼是一維碼的擴展。 在超市購物時,最終的清算,基本上都是櫃員掃一遍所有物品的條碼然後得出總價。這個條碼就是一維條碼,將黑色條紋和空白間隙按照一定的規則排列,做成一個平行線圖案,就能表達一組相對簡單的數字符號信息。

一維條碼只在排列黑白條紋的一個方向上記錄數據,而二維碼則將另一個方向擴展使用上,使其在另一個垂直方向上也記載數據 。雖然形式上有排列式,矩陣式等不同的形式,但是底層代碼編碼編制上都還是基礎的0,1邏輯,使用與二進制相關的圖形表達文字數字信息,掃描設備識別圖形並在相應特定的字符集中取出對應的數據字符實現自動處理。 並且二維碼在一維碼的基礎上,增設了“定位點”以及“容錯機制”,記載數據量更多,能準確傳遞如圖片鏈接,網絡鏈接等數據。

定位點是二維條碼的一個特殊的定位標記。通常的二維碼我們都能看到三個角是一樣的黑白包容的方塊,但是另一個角則不一樣,因為三個點就能表示限定出一個矩形的範圍,並能讓識別設備從正確的方向來識別它,所以二維碼不管是從哪個方向上都能識別出來的。

二維碼編碼生成過程本身是將數據信息轉換為圖形的過程,讀取也就是從圖形中讀取數據信息。二維碼容錯性是通過在二維碼生成時進行冗餘設定,我們將要存入的數據,進行冗餘運算在二維碼中存入多條相同的數據。經過這個冗餘運算的步驟後,生成出來的二維碼在有部分破損或者遮擋的情況下仍可識別。如常見的二維碼為 QR 碼,QR 碼的容錯率從低到高就有 L,M,Q,H 四個容錯等級,等級越高容錯性越好,相同破壞比例下被識別的概率越大。而平常使用一般的二維碼生成軟件也能達到 30%的高容錯率,有一點破損汙點來識別也是基本OK的。


stormzhang


條碼就是由一組按一定編碼規則排列的條、空符號,用以表示一定的字符、數字及符號組成的信息。條碼可能是迄今為止最經濟、實用的一種自動識別技術。條碼技術具有輸入速度快、可靠性高、採集信息量大、靈活實用幾個方面的優點。

二維碼出現之前,還有一種一維碼,也就是條形碼,條形碼由於是一維條碼,更多的描述物品的信息只能依賴於後臺的數據庫。但隨著人們對編碼的大容量和高精度要求的進一步提高,一維碼已經不能滿足人們在某些領域的需要,正是在這種技術背景下,二維碼的概念出現了。

二維碼是在一維碼的基礎上,在兩個方向上進行的編碼和解碼。二維碼是用某種特定的集合圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄數據符號信息;這將極大地增大編碼的容量,從而很好地解決條形碼容量不足和編碼加密機制過於簡單的問題,從而增強了條形碼的容量和加密功能。在代碼編制上巧妙地利用構成計算機內部邏輯基礎的“0”、“1”比特流的概念,使用若干個與二進制相對應的幾何形體來表示文字數值信息,通過圖形輸入設備或光電掃描設備自動識讀以實現信息自動處理:它具有條碼技術的一些共性:每種碼制都有其特定的字符集;每個字符佔有一定的寬度;具有一定的校驗功能等。同時還具有對不同行的信息自動識別功能及處理圖形旋轉變化等特點。

一切正在發生,思想陶熔鼓鑄。


一切正在發生


這個問題,我以一名專業性學生的知識給大家解釋下。

我們先了解什麼是二維碼。不知道從什麼時候開始,我們的生活突然之間就充滿了二維碼。看網頁要二維碼,加好友要二維碼,現在就連樓下賣水果的大爺付款也要掃二維碼。

那麼大家有沒有想過,這個長得奇怪的東西,到底是怎麼來的呢?二維碼到底是什麼原理?今天我就用我專業性的知識給大家科普一下。

我們在介紹二維碼原理之前,給大家說下條形碼,也就是超市收銀員結賬的時候掃的那個東西。電腦在水平方向上識別粗細不均的黑白條,就能找出藏在裡面的商品編號信息,比如價格,商品名稱。相比於條形碼只在一個緯度上工作的原理,二維碼在水平和垂直兩個緯度上都攜帶了信息,也就是做成了這個方塊狀的東西。條形碼和二維碼這對好基友,說白了其實就是給數字和母還有符號這類的信息換了一身衣服,把他們打扮成了能給電腦識別的黑白條和方塊。

那麼最關鍵的問題來了,這種方塊是怎麼變成能被電腦識別的圖案的呢?這就要提到一個人類具有劃時代的發明了,那就是二進制。我們平時使用的數字和字母還有漢字等各種字符,雖然畫風完全不同,但是機智的人類發明了一種方法,使他們都能被統一轉變為0和1組成的二進制數字序列,這個轉化的過程叫做編碼。

國際上有幾套通用的編碼規則。我們今天就用一個例子給大家感受下,編碼是怎麼回事。比如AB,這個由兩個英文字母組成的字符。根據編碼規則,每一個獨立的英文字母都有一個唯一的十進制數字與之對應,而想AB這樣的字符串,則要在對應數字的基礎上在做運算,而運算結果在轉化成二進制,就是一串數字。對了,在整個計算機和物聯網文明都是建立在這種二進制編碼上的。你在看的視頻,在你的手機上只是一串0和1而已。

我們回到二維碼的生成原理上,字符在變成只有0和1組成的數字序列後,在進行一系列優化算法後,就得到了最終的二進制編碼。在最後這串編碼中,一個0對應的就是一個白色小方塊,一個1對應的就是一個黑色的小方塊。我們把這些小方塊按照8個一組,填進大方塊裡,這就是一個完整的,可以被手機相機識別的二維碼圖案了。

對了,不知道大家注意到沒有,為什麼所以的二維碼,都有三個小方塊在邊上?其實這個三個一模一樣的小方塊是用來給手機相機定位的,這樣不管你的二維碼是正的掃還是倒著左右掃,都能被手機相機識別,並且掃出來的結果都一樣。


南色空兒


安靜區域:空白邊框,可以將代碼與其他打印信息隔離(例如,在髒信封上,報紙的黑白打印或汙跡產品包裝上)。

Finder模式:三個角落中的大黑色和白色方塊可以很容易地確認這是一個QR碼(而不是,例如,Aztec代碼)。由於它們只有三個,所以很明顯代碼的哪個方向以及它指向的角度(除非代碼在某種程度上被部分遮擋或損壞)。

對齊模式:這確保代碼可以被破譯,即使它是扭曲的(以某個角度查看,打印在曲面上,等等)。

定時模式:在三個取景器模式之間水平和垂直地運行,由交替的黑色和白色方塊組成。時序模式可以輕鬆識別QR碼中的各個數據單元,在代碼損壞或失真時尤其有用。

版本信息:QR碼標準有各種不同版本;版本信息(位於兩個取景器模式附近)簡單地識別在特定代碼中使用哪一個。

數據單元:每個單獨的黑色或白色方塊不屬於標準特徵之一(時序,對齊和其他模式),包含代碼中的一些實際數據。


我會在這裡發佈所有與科技、科學有關的有趣文章,歡迎訂閱我的頭條號。偶爾也回答有趣的問題,有問題可隨時在評論區回覆和討論。


楊沐白


這個問題好,我的畢業設計就是做二維碼的,做一個電腦生成二維碼的軟件,輸入文字,網址,一點自動生成二維碼,


然後做了一個識別的實物設備,用一塊觸摸屏,一個攝像頭,一塊STM32開發板,做好編程完成後,用攝像頭一掃就可以識別出二維碼的信息。對了,我用的是自定義的編碼規則,想了解的可以關注交流。

其實很簡單,就是將你輸入的文字網址等先轉變為二定位的0.1代碼,然後將01分別對應成黑白像素塊,然後按照一定的排列規則分佈排列在二維碼的信息存儲區,當然這中間少不了加密。


目前市面上的二維碼大都用兩三種編碼規則,但二維碼編碼規則好幾十種,當然你也可以自己定義,其實很簡單的。


對了,二維碼的三個角的那個大方塊叫做定位區,裡面右下角還有個輔助定位區,這點看著名字大家都能理解吧


分享到:


相關文章: