条形码、二维码、三维码解读
條形碼、二維碼、三維碼解讀
- 1 條形碼 Bar code
- 1.1 釋義
- 1.2 識別原理
- 1.3 編碼原理
- 1.4 示例:Code128編碼
- 2 二維碼 QR code
- 2.1 釋義
- 2.2 QR 碼基本結構
- 2.3 碼元結構
- 2.4 編碼規范
- 2.5 活碼
- 3 三維碼 VR code
- 3.1 釋義
- 3.2 拓展
元旦假期無聊做了個 手繪二維碼工具,一直以來都只是用,卻對其背后的信息不是很了解,恰逢周末,正好來學習記錄一下。
1 條形碼 Bar code
1.1 釋義
條形碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組信息的圖形標識符。
但是光有這些標識,其實是沒多大用途的;需要和條形碼識別器進行配合,將標識中“包含”的數據讀取出來,才能被用于后續的使用。
1.2 識別原理
條碼符號是由反射率不同的“條”、“空”按照一定的編碼規則組合起來的一種信息符號。由于條碼符號中“條”、“空”對光線具有不同的反射率,從而使條碼掃描器接受到強弱不同的反射光信號,相應地產生電位高低不同的電脈沖。而條碼符號中“條”、“空”的寬度則決定電位高低不同的電脈沖信號的長短。
條形碼掃描器利用光電元件將檢測到的光信號轉換成電信號,再將電信號通過模擬數字轉換器轉化為數字信號傳輸到計算機中處理。我們在生活中,最常見到的就是下面這種設備。
1.3 編碼原理
有一篇文章介紹的很全面,這里不再贅述。
1.4 示例:Code128編碼
空白+開始位 + [FNC1(為EAN128碼時加)] + 數據位 + 檢驗位 + 結束位+空白
Code128檢驗位計算:(開始位對應的ID值 + 每位數據在整個數據中的位置×每位數據對應的ID值)% 103
比如我要編碼的內容是“TIGER”,則參照碼表。
| 0 | SP | SP | 0 | 212222 | bbsbbssbbss |
| 31 | ? | ? | 31 | 212321 | bbsbbsssbbs |
| 37 | E | E | 37 | 132113 | bsssbbsbsss |
| 39 | G | G | 39 | 211313 | bbsbsssbsss |
| 41 | I | I | 41 | 231311 | bbsssbsssbs |
| 50 | R | R | 50 | 231131 | bbsssbsbbbs |
| 52 | T | T | 52 | 213311 | bbsbbbsssbs |
| 101 | FNC4 | CODEA | CODEA | 311141 | bbbsbsbbbbs |
| 102 | FNC1 | FNC1 | FNC1 | 411131 | bbbbsbsbbbs |
| 103 | StartA | StartA | StartA | 211412 | bbsbssssbss |
| 104 | StartB | StartB | StartB | 211214 | bbsbssbssss |
| 105 | StartC | StartC | StartC | 211232 | bbsbssbbbss |
| 106 | Stop | Stop | Stop | 2331112 | bbsssbbbsbsbb |
則按照編碼規則后可計算出數據位與校驗位((103 + 52 + 241 + 339 + 437 + 550)%103)
開始位StartA(bbsbssssbss)+數據位[T(bbsbbbsssbs) I(bbsssbsssbs) G(bbsbsssbsss) E(bsssbbsbsss) R(bbsssbsbbbs)] + 檢驗位31(bbsbbsssbbs)+ 結束位Stop(bbsssbbbsbsbb)即:
bbsbssssbssbbsbbbsssbsbbsssbsssbsbbsbsssbsssbsssbbsbsssbbsssbsbbbsbbsbbsssbbsbbsssbbbsbsbb然后機器用這個字符串按像素排列,生成條形碼
# pip install pySrtich import os from pystrich.code128 import Code128Encoder encoder=Code128Encoder('tiger') encoder.save("./1.png",bar_width=2) os.system("./1.png")詳細解讀可點擊鏈接
2 二維碼 QR code
2.1 釋義
二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型。
2.2 QR 碼基本結構
在這張圖中,不難看出:空白區、位置探測圖形、矯正圖形、定位圖形都是固定的。
校正圖形:規格確定,校正圖形的數量和位置也就確定了;
格式信息:表示改二維碼的糾錯級別,分為L、M、Q、H;
版本信息:即二維碼的規格,QR碼符號共有40種規格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號比前一版本 每邊增加4個模塊。
數據區和糾錯碼字,這塊才是我們所有信息的幾種匯聚地。
詳細結構可參考:鏈接
2.3 碼元結構
可以看出,數據區數據越多,需要的碼元空間也就越大,其版本也就越大,我們肉眼能看到的二維碼也就越密集。版本最大到 40,也就是說,數據區可存儲的數據空間是有限的,超過一定閾值,就無法生成二維碼。
2.4 編碼規范
第一步,計算出編碼數據占據的空間大小,選擇最佳版本坑位。
第二步,將數據字符轉化成位流。
如需模式轉化,則在新的模式段開始前加上模式指示符進行模式轉換。在數據序列后面添加終止符。最終位流以8 位進行碼字。
在此過程中,需根據修正精度,計算你糾錯編碼。
按需要將上面的碼字序列分塊,并根據糾錯等級和分塊的碼字,產生糾錯碼字,并把糾錯碼字加入到數據碼字序列后面,成為一個新的序列。
第三步,填充數據到指定位置,生成二維碼。
序列順序如:如:D1, D12, D23, D35, D2, D13, D24, D36, … D11, D22, D33, D45, D34, D46, E1, E23,E45, E67, E2, E24, E46, E68,…
示例
數據可以按照一種模式進行編碼,以便進行更高效的解碼,例如:對數據:01234567編碼(版本1-H),
1)分組:012 345 67
2)轉成二進制:012→0000001100 (即8+4)
345→0101011001
67 →1000011
3)轉成序列:0000001100 0101011001 1000011
4)字符數 轉成二進制:8→0000001000
5)加入模式指示符(上圖數字)0001:0001 0000001000 0000001100 0101011001 1000011
對于字母、中文、日文等只是分組的方式、模式等內容有所區別。基本方法是一致的
2.5 活碼
活碼說白了就是二維碼內套二維碼,外層二維碼不會變化,但是經由外部二維碼識別到的內容,可以隨意更換。
二維碼很好用,我自己在公司內有一套專屬工具箱(《泰戈爾的工具箱》),里面呢有一系列掃碼預覽工具,號稱“APP 內全場景落地頁預覽神器”。其就是建立在二維碼之上。用的時候絕大多數場景都沒啥問題,但是有一些情況下,由于編碼跳轉鏈接太過冗長,會導致數據量超出了二維碼能承載的上限。
這就導致沒辦法直接生成二維碼去“預覽跳轉”了。結合市面上常見的“活碼”技術,針對這個數據承載量有限的問題,我也有了一套針對性解決方案。
那就是“重定向”(僅支持端內跳轉形式的 scheme 來生成二維碼)。
比如來看個例子:
生成二維碼“活碼”
手機與電腦鏈接至同一臺 WiFi 設備下,掃這個碼。
可以發現成功 redirect。
我生成的碼命名是“http://192.168.0.104:8080/redirect”, 結果掃碼后卻是"https://blog.csdn.net/marksinoberg"。
這就是“活碼”的其中一個應用,目前很好的解決了我在公司內遇到的二維碼過長無法生成問題。
不難看出,“活碼”可應用的方向多,但受限也比較多,具體場景具體分析吧。
3 三維碼 VR code
3.1 釋義
三維碼, [1] 英文名稱VR Code,VR全稱Visual Recognition(視覺識別),由創始人陳繩旭 [2] 重新定義標識為“三維碼”,并在全球范圍內申請相關知識產權保護,其中包括商標。三維碼相較于二維碼具有更大的信息容量、相同的識別便易性和較好的安全性。其編碼方式是先將文本編譯一串二進制數字,然后通過特定的算法并結合圖片整體的色彩內容,將該二進制數字串與圖像信息編碼為一組可以通過特定規則解讀的陣列。并且該圖像陣列除了可以被機器設備讀取以外,僅用人眼辨識也可以獲取到部分乃至全部文本信息。
3.2 拓展
對三維碼我也只是略有耳聞,沒有具體了解,有興趣的可自查,這里不做記錄了。
總結
以上是生活随笔為你收集整理的条形码、二维码、三维码解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改MYSQL 密码
- 下一篇: 2019年中国研究生数学建模大赛的经验分