天天都掃的二維碼,你知道它的技術原理嗎?

引言

二維碼已經成為我們日常生活中必不可少的組成部分了,登入需要掃一掃二維碼、買東西付錢需要掃一掃二維碼、開會簽到也需要掃一掃二維碼,那麼如此廣泛使用的二維碼技術,背後的原理是怎樣的呢?本文將結合二維碼的發展歷程以及典型應用場景,分析二維碼背後的技術原理。

二維碼發展簡史

條形碼的誕生

在理解二維碼技術原理之前,我們先來簡單看下它是怎麼發展起來的。早在 1948 年,伯納德·塞爾沃還是費城煤氣科技學院的一名研究生,在一次偶然的機會他得知當地的一家超市的老闆想要院長幫忙設計一種可以掃描商品價格的裝置,用以提高超市內貨品銷售的效率。因為超市裡的收銀員在結算貨品的時候每次都需要手動輸入架構,超時客流量達的時候,收銀員結算效率十分低下。但是院長覺得這是一件非常不容易做到的事情。

然而伯納德·塞爾沃與他的朋友約瑟夫·伍德蘭德卻覺得這是一個巨大的商機,決定要好好設計做出個可以商用的產品出來。在嘗試了紫外線照射石墨髮光的方案、盲點系統以及點線符號系統等方案之後,由於當時的技術限制,都沒有得到廣泛的應用。

轉眼時間來到了 20 世紀 60 年代,伍德蘭德始終沒有放棄當年那麼沒有實現商業化應用的金點子。此時他已經是 IBM 的一位工程師了,在公司期間,他不斷闡述自己關於條形碼的技術實現想法,同事不斷強調條形碼的商業價值。與此同時,鐳射以及計算機已經開始應用起來,條形碼實現的技術基礎已經完成。大概在 1969 年,伍德蘭德參與到 IBM 公司投入的由喬治·勞雷爾負責的超市掃描器和標籤研究專案組中,經過幾年的潛心研究,IBM 終於推出了可識別的條形碼。

在 1974 年 6 月 26 日的這一天,世界上第一個條形碼掃描器被安裝在俄亥俄州特洛伊的馬什超市裡。第一件被掃描的商品是 10 包箭牌的多汁水果味口香糖,這包口香糖如今已被美國曆史博物館收藏 。而後,條形碼被廣泛應用於商品、書籍、郵政等系統中,極大地提升了業務執行效率。

天天都掃的二維碼,你知道它的技術原理嗎?

我們可以看得出來推動技術進步的往往都是現實生活中的業務需求。但是隨著條形碼的廣泛用,它的不足之處逐漸顯現出來:

1、條形碼的資料表示內容非常有限,只能表示數字以及字母,無法表示更多的其他字元資訊;

2、條形碼錶示的資料量也非常有限,如果想要包含更多的資料只能不斷地進行水平拉伸,導致條形碼越來越大,不利於商用;

3、條形碼如果出現變形或者條形丟失就會造成資料的不可獲取,影響業務的正常使用;

正因為條形碼存在著這樣以及那樣的不足之處,人們對於出現有一種可以表達更多資訊的的期望與日俱增。

二維碼橫空出世

雖然二維碼的應用在中國大放異彩,但是實際上它是日本人發明的。日本 Denso Wave 公司(日本電裝株式會社(Denso Corporation)旗下的子公司)的騰弘原是二維碼的發明者。在公司的業務中需要對汽車的零部件標註屬性資訊,包括產地、生產時間、生產批次等等資訊,傳統的條形碼無法滿足大量資訊的標註,因此需要一種涵蓋更加多資訊的標註方式。

騰弘原想到既然一維的條形碼沒辦法表達更多訊息,那麼是不是可以增加維度來讓其表示更多的資訊,這就是二維碼的思考雛形。但是緊接著又遇到了如何讓這個二維碼能夠實現高速的讀取。技術攻關小組利用正方形的四個角中的三個來作為定位符,然後透過剩餘的一個角來判斷實際二維碼的方向,從而達到無論是從什麼方向進行掃描,都不影響二維碼內容的讀取。

經過幾年的反覆測試,騰弘原地攻關小組終於攻克技術難關,這個小小的方塊二維碼在資訊儲存上相比條形碼提升了 300 倍,而在二維碼的識別速度上提升了 10 倍。在 1994 年,DENSO WAVE 公司面向全日本開始推廣二維碼技術,並將其命名為“Quick Response Code”。時至今日,二維碼已經在全世界範圍內得到廣泛應用,尤其是在中國可以說是發揮到了極致。

技術原理

在網上我們可以輕鬆找到線上製作二維碼的工具網站,這些網站中,可以轉化為二維碼的資訊包含了,文字、URL、圖片以及音影片等等。由此可知二維碼的本質實際就是一種資料資訊的表現方式。

天天都掃的二維碼,你知道它的技術原理嗎?

我們都知道二維碼是由很多個白色方塊以及黑色方塊組成,實際上就是對應計算機世界中的 0-1 二進位制語言。其中黑色小方塊代表 1,白色小方塊代表 0。因此這些看似沒有規律的黑白方塊二維碼組合在一起就是 0-1 組成的資訊組合。而 0-1 組成的二進位制資料實現對於資訊的編碼,也是計算機可以看懂的語言。

天天都掃的二維碼,你知道它的技術原理嗎?

手機進行二維碼掃描的時候,由於二維碼是黑白相間的二位點陣,透過光的反射進入手機攝像頭時候,手機中的 CMOS 感光元件將接收到的光訊號轉化為電訊號,而二維碼代表的 0-1 組合實際在手機中就是對應的高低電位,最終解析為二維碼對應的標註資訊。

天天都掃的二維碼,你知道它的技術原理嗎?

掃碼登入

掃碼登入是二維碼非常典型的應用場景,以前我們登入網站需要輸入使用者名稱以及密碼,有時候還為一時想不起來密碼是多少而非常著急。自從有了二維碼登入之後,只要拿出手機掃一掃 web 端的二維碼就可以完成登入操作非常方便,那我們就來分析下二維碼掃描登入的技術原理是怎樣的吧。

對於登入這件事情來說,其本質實際包含了兩件事情,第一件事情是告訴平臺你是誰,第二件事情是向平臺證明你就是你不是別人。那傳統的使用者名稱以及密碼登入的方式,使用者名稱實際就是告訴平臺你是誰,而密碼就是向平臺證明你就是你。那麼放在二維碼掃碼登入的場景下,實際也是需要完成這兩件事情的支撐。下面我們就看下掃碼登入的實現機制。

在進行掃碼登入之前,我們需要先在客戶端進行登入操作。在客戶端登入的時候,需要輸入使用者名稱以及密碼資訊,此後的客戶端與服務端的互動過程大致如下所示:

1、首先使用者在客戶端輸入使用者名稱以及密碼進行登入操作;

2、客戶端攜帶使用者名稱、密碼以及裝置資訊向服務端發起登入請求;

3、服務端校驗使用者名稱以及密碼資訊,同時將賬號資訊與裝置資訊進行繫結,並返回 token 資訊;

4、客戶端儲存 token 資訊;

5、再次登入的時候不需要再傳遞使用者名稱以及密碼,將 token 資訊以及裝置資訊傳遞給服務端,服務端校驗 token 以及裝置資訊;

這裡的 token 資訊實際就是代替了賬號以及密碼資訊,可以理解為一種資料結構儲存了賬號、裝置等資訊,用以後期的服務端校驗。

天天都掃的二維碼,你知道它的技術原理嗎?

上面所說的是客戶端登入的大致步驟,它是客戶端掃碼登入的基礎,接下來我們再看下掃碼登入的大致業務流程,如下所示:

天天都掃的二維碼,你知道它的技術原理嗎?

在這個過程中最重要的是生成臨時的 token,這個臨時 token 實際就是一種登入的憑證,並且與二維碼一一對應,用過一次就會失效。那為什麼要有這個臨時的 token 呢?實際是為了解決掃碼這個動作與登入的連線關係,系統需要確認二維碼是被客戶端掃描後進行的登入操作。

總結

本文主要結合了二維碼的技術發展歷程,闡述了二維碼的技術原理,同時對二維碼典型的應用場景進行了技術原理的分析,相信透過本文大家對於二維碼的原理有了更加深刻的理解。