加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

走進(jìn)二維碼(QR Code)的世界之引言

2020/04/13
235
閱讀需 10 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是走進(jìn)二維碼(QR Code)的世界專(zhuān)題的引言。

如今二維碼可以說(shuō)是深入走進(jìn)大家的生活了,推送名片、掃碼支付都離不開(kāi)它,大家?guī)缀趺刻於紩?huì)和二維碼打交道。雖然大家都知道二維碼的各種應(yīng)用,但很多人并不知道二維碼的原理。做嵌入式這行的人一大特質(zhì)就是喜歡研究各種技術(shù)本身,痞子衡早就對(duì)二維碼技術(shù)感興趣了。上期《嵌入式半月刊》的最后,痞子衡介紹了一個(gè)基于 i.MXRT1050 的掃碼支付終端(QM50),這是一個(gè)二維碼識(shí)別的應(yīng)用。這個(gè)應(yīng)用徹底激活了痞子衡對(duì)二維碼的好奇心,所以接下來(lái)痞子衡打算帶大家一起深入研究一下二維碼技術(shù),從零開(kāi)始認(rèn)識(shí)二維碼,并最終在 MCU 上實(shí)現(xiàn)二維碼生成與識(shí)別的設(shè)計(jì)。

如下圖左邊所示的矩形二維碼是大家最??吹降念?lèi)型,網(wǎng)上可以找到很多資料,也有很多成熟的開(kāi)源庫(kù),痞子衡的最終目標(biāo)不是研究這個(gè)已經(jīng)沒(méi)啥秘密可言的二維碼,右邊那個(gè)放射狀的圓形二維碼才是痞子衡更感興趣的,這是微信于 2017 年推出的全新設(shè)計(jì)的小程序二維碼,網(wǎng)上關(guān)于這種二維碼的設(shè)計(jì)資料非常少,也沒(méi)有開(kāi)源庫(kù),所以痞子衡打算實(shí)現(xiàn)一下圓形二維碼。

今天痞子衡就先給大家簡(jiǎn)單介紹一下 QR Code 基本知識(shí)以及這個(gè)專(zhuān)題后續(xù)的推進(jìn)計(jì)劃:

一、QR Code 入門(mén)

1.1 二維碼起源與種類(lèi)

在介紹二維碼之前,很有必要先提一下它的老大哥條形碼(barcode),條形碼技術(shù)早在 20 世紀(jì) 40 年代就被發(fā)明出來(lái)了,只不過(guò)到了 70 年代激光束掃描器的問(wèn)世才使得條形碼技術(shù)真正落地。條形碼常用的碼制有 EAN、UPC、Codabar、Code 39、Code 128 等。

條形碼本質(zhì)上屬于一維碼,一維碼所攜帶的信息量有限,如 EAN-13 碼僅能容納 13 位阿拉伯?dāng)?shù)字,更多的信息只能依賴(lài)數(shù)據(jù)庫(kù)的支持,離開(kāi)了預(yù)先建立的數(shù)據(jù)庫(kù),這種條形碼就沒(méi)有意義了,因此,在一定程度上也限制了條形碼的應(yīng)用范圍?;谶@個(gè)原因,在 20 世紀(jì) 80 年代出現(xiàn)了二維碼。

二維碼依靠其龐大的信息攜帶量,能夠把過(guò)去使用一維條形碼時(shí)存儲(chǔ)于后臺(tái)數(shù)據(jù)庫(kù)中的信息包含在二維條形碼中,可以直接通過(guò)閱讀二維條形碼得到相應(yīng)的信息,并且二維條形碼還有錯(cuò)誤修正技術(shù)及防偽功能,增加了數(shù)據(jù)的安全性。全球現(xiàn)有 250 多種二維碼,其中常見(jiàn)技術(shù)標(biāo)準(zhǔn)有 PDF417,QRCode,Code49、Code16K,CodeOne 等 20 余種。

1.2 QR Code 發(fā)明人

目前最流行的二維碼非 QR Code 標(biāo)準(zhǔn)莫屬,這是來(lái)自日本的電裝公司發(fā)明的一種二維碼。關(guān)于 QR Code 的發(fā)展歷史可以看電裝公司自己寫(xiě)的軟文《QR 碼的成功之路》。QR Code 于 2000 年被正式采納為 ISO 國(guó)際標(biāo)準(zhǔn) (ISO/IEC18004)。

  • 電裝公司官網(wǎng):https://www.denso-wave.com/QR Code 官網(wǎng):https://www.qrcode.com/

這是 QR Code 的簡(jiǎn)要標(biāo)準(zhǔn),大家先睹為快:

  • 規(guī)范手冊(cè):ISO/IEC 18004:2015 Information technology — Automatic identification and data capture techniques — QR Code bar code symbology specification 在線閱讀:https://www.doc88.com/p-3847760679293.html 中文譯本:https://www.jianshu.com/p/7f0f30f20ef5

?

1.3 QR Code 基本概念

QR Code 有三個(gè)基本概念你必須要知道,分別是模型、版本、糾錯(cuò)能力。

QR Code 一共有兩個(gè)模型,分別是模型 1 和模型 2。模型 1 是最早制作的 QR Code,最高版本為 14(73×73 碼元),最多可以處理 1167 位數(shù)字。模型 2 是模型 1 的改良版,它在二維碼變形的情況下也能順利讀取數(shù)據(jù)。當(dāng)二維碼被打印在曲面上,或者由于讀取角度等原因?qū)е露S碼變形時(shí),仍然可以通過(guò)設(shè)置在二維碼內(nèi)部的對(duì)齊模式有效讀取。模型 2 最高版本為 40(177×177 碼元),最多可以處理 7089 位數(shù)字。

現(xiàn)在市面上主流的就是 QR Code 模型 2,后面文章所提的 QR Code 均指模型 2。QR Code 設(shè)有 1 到 40 的不同版本(種類(lèi)),每個(gè)版本都具備固有的碼元結(jié)構(gòu)(碼元數(shù))。(碼元是指構(gòu)成 QR Code 的方形黑白點(diǎn))。“碼元結(jié)構(gòu)”是指二維碼中的碼元數(shù)。從版本 1(21 碼元×21 碼元)開(kāi)始,在縱向和橫向各自以 4 碼元為單位遞增,一直到版本 40 (177 碼元×177 碼元)。

QR Code 具有“糾錯(cuò)功能”。即使編碼變臟或破損,也可自動(dòng)恢復(fù)數(shù)據(jù)。這一“糾錯(cuò)能力”具備 4 個(gè)級(jí)別,用戶(hù)可根據(jù)使用環(huán)境選擇相應(yīng)的級(jí)別。調(diào)高級(jí)別,糾錯(cuò)能力也相應(yīng)提高,但由于數(shù)據(jù)量會(huì)隨之增加,編碼尺寸也也會(huì)變大。

QR Code 的糾錯(cuò)功能是通過(guò)將 Reed-solomon Codes(RS 碼)附加到原數(shù)據(jù)中的方式實(shí)現(xiàn)的。RS 編碼是應(yīng)用于音樂(lè) CD 等用途的數(shù)學(xué)糾錯(cuò)方法。它能以字節(jié)為單位進(jìn)行糾錯(cuò),適合用于錯(cuò)誤位置會(huì)集中的突發(fā)錯(cuò)誤。

二、QR Code 變種:微信小程序碼

2.1 QR Code 變種

前面介紹的是最標(biāo)準(zhǔn)的 QR Code 樣式,但二維碼發(fā)展到現(xiàn)在已經(jīng)出現(xiàn)了很多變種,有彩色圖片、動(dòng)圖、甚至非矩形的。這些變異二維碼本質(zhì)上與標(biāo)準(zhǔn) QR Code 原理一致,只是在編碼排版上有所不同,因此生成和識(shí)別工具也不同。

2.2 微信小程序碼

微信小程序碼也是一種異形碼,這是騰訊 2017 年 1 月為微信小程序?qū)iT(mén)設(shè)計(jì)的一種二維碼式樣,這種異形并不是微信的首創(chuàng),F(xiàn)acebook、Snap 等公司都已經(jīng)推出過(guò)類(lèi)似的異形碼。這種小程序碼相比標(biāo)準(zhǔn)二維碼有如下幾個(gè)優(yōu)點(diǎn):

  • 觀賞性:小程序碼與普通二維碼相比,看起來(lái)更美觀掃碼預(yù)期:掃碼前能明確知道掃碼之后將會(huì)體驗(yàn)到一個(gè)小程序安全性:小程序碼目前只能通過(guò)微信產(chǎn)生,并且只能通過(guò)微信識(shí)別,安全性更高品牌宣傳:每個(gè)小程序碼右下角都是固定的微信小程序 Logo,每見(jiàn)到一次小程序碼,大家就能多一次聯(lián)想到微信小程序高容錯(cuò)性:當(dāng)一張二維碼圖片中間嵌有某些 Logo 圖片時(shí),其實(shí)相當(dāng)于是把最中間部分有用的編碼信息挖掉,再貼一張 Logo 圖片上去。而小程序碼不同,中間的 Logo 區(qū)并不包含數(shù)據(jù)編碼的部分,因此小程序碼擁有更高的容錯(cuò)性
  • ?

目前小程序碼一共支持 3 種容量,分別是 36 射線、54 射線和 72 射線:

因?yàn)樾〕绦虼a的專(zhuān)用性,目前它的生成都只能通過(guò)調(diào)用微信官方 API 接口,關(guān)于小程序碼的設(shè)計(jì)文檔寥寥無(wú)幾,來(lái)自騰訊官方的文章《你一定不知道,小程序碼是這樣綻放的》只稍稍透露了一些。

三、走進(jìn) QR Code 世界之路

鑒于以上介紹,痞子衡新開(kāi)的這個(gè)專(zhuān)題后續(xù)推進(jìn)計(jì)劃如下:

  • 階段一:學(xué)習(xí)標(biāo)準(zhǔn) QR Code 原理,使用 Python 搭建一個(gè)二維碼生成與識(shí)別平臺(tái)(基于現(xiàn)有開(kāi)源庫(kù))階段二:深入標(biāo)準(zhǔn) QR Code 原理,純手工寫(xiě) Python 代碼實(shí)現(xiàn) Version1,ECC Level 為 L 的二維碼生成與識(shí)別階段三:學(xué)習(xí)微信小程序碼原理,純手工寫(xiě) Python 代碼實(shí)現(xiàn) 36 射線小程序碼生成與識(shí)別階段四:將 Python 端手工實(shí)現(xiàn)移植到 MCU 端,在 i.MXRT1060-EVK 板上實(shí)現(xiàn)二維碼生成與識(shí)別階段五:移植一個(gè)成熟開(kāi)源庫(kù)到 MCU 端,在 i.MXRT1060-EVK 板上實(shí)現(xiàn)二維碼生成與識(shí)別
  • ?

至此,走進(jìn)二維碼(QR Code)的世界專(zhuān)題的引言痞子衡便介紹完畢了,掌聲在哪里~~~

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門(mén),擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會(huì)定期分享嵌入式相關(guān)文章