二進位
世界上可以分成 10 種人,懂二進位的人,以及不懂二進位的人。
條碼(barcode) – 一維條碼
掃描原理
想要辨識條碼就要經過 掃描 與 解碼 兩個過程。
掃描:
當掃描器(有光筆、感光耦合元件(CCD)、雷射三種)光源發出的光在條碼上反射後,反射光照到掃描器內部的光電轉換器上,光電轉換器根據強弱不同的光訊號,轉換成相應的電訊號。
解碼:
電訊號輸出到放大電路增強訊號之後,再送到整形電路將類比訊號轉換成數位訊號。
商品條碼的結構與編碼方式
▲ 以EAN-13來舉例
條碼的結構
靜區:空白區域,除了能防止條碼周圍被占用,左空白也能讓掃描設備做好掃描準備,右空白則是保證掃描設備正確識別條碼的結束標記。
起始字元:第一位字元,具有特殊結構,當掃描器讀取到該字元時,就代表正式讀取代碼了。
資料字元:條碼的資料內容。(不同條碼種類有不同的編碼規則,甚至同種也會有不同的編碼規則)
校驗字元:檢驗讀取到的資料是否正確。(不同條碼種類可能會有不同的校驗規則)
終止字元:最後一位字元,具有特殊結構,掃描器讀取到該字元時,表示代碼掃描完畢,甚至還能作為二次校驗。
編碼方式
▲ EAN-13的各代碼意義
EAN條碼之字元編碼構造
左資料碼與右資料碼
檢查碼
4 | 7 | 1 | 0 | 0 | 1 | 8 | 1 | 6 | 5 | 1 | 0 | 8 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
B13 | B12 | B11 | B10 | B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | C |
- 先將B2,B4,B6,B8,B10,B12的值相加起來,然後乘以3
(0+5+1+1+0+7)*3=42 - 將B3,B5,B7,B9,B11,B13的值相加起來
(1+6+8+0+1+4)=20 - 將步驟1的值 加上 步驟2的值,取其個位數
42+20=62, 取個位數2 - 用10去減掉步驟3取到的個位數
10-2=8
常見的條碼種類(每個編碼方式不一定相同喔)
- Code39
常用於: 帳單
範例圖: - Code 128
常用於: 身分證
範例圖: - EAN-13
常用於: 商品
屬於國際標準條碼,在GS1系統稱之為GTIN-13條碼
範例圖: - EAN-8
常用於: 面積比較小的商品
屬於國際標準條碼,在GS1系統稱之為GTIN-8條碼
範例圖: - ITF-14
常用於: 外箱
只能用於標識非零售商品外箱
範例圖: - ISBN
常用於: 書籍
國際標準書號長度為13碼或者10碼(在2007年1月1日之前)數字
範例圖: - ISSN
常用於: 雜誌書刊
範例圖:
二維條碼(two-dimensional barcode)
為什麼要二維條碼
QR code(Quick Response Code)
尺寸
QR Code的尺寸越大,能夠承載的資訊量也就越多
容錯能力
- L(低):可修正7%的字碼。
- M(中):可修正15%的字碼。
- Q(中高):可修正25%的字碼。
- H(高):可修正30%的字碼。
▲ 此圖為H等級容錯
最大容量
容錯能力越高,同等級的QR Code能夠容量的資訊量就越少
就版本40和容錯等級L而言,最多可以存
結構
掩碼(Masking)
編碼結束之後,為了避免資料區域出現連續的空白、連續的黑色區域、或是和定位點相似的圖形,還會再進行掩碼程序,透過演算法,選擇合適的掩碼圖案
編碼方式
每個Version的QR Code訊息編排順序都不同,容錯等級也牽涉到QR Code的訊息編排方式,因此就算是同樣的訊息,也會產生不同的QR Code。
常見種類
- PDF417 (注意此為堆疊式條形碼)
- QR code (矩陣條形碼)
- Data Matrix (矩陣條形碼)
常用於: 美國商品的廠商或檢驗單位 - MaxiCode (矩陣條形碼)
常用於: 美國的快遞公司 - CrontoSign (矩陣條形碼)
常用於: 瑞士銀行的電子銀行訪問和交易身份驗證
條碼小實作
請先安裝python圖像庫(pip install Pillow)
商品條碼 (pip install python-barcode)
from barcode import EAN13
from barcode.writer import ImageWriter
your_data = '4710088412539'
with open('barcode.png', 'wb') as f:
EAN13(your_data, writer=ImageWriter()).write(f)
qr code (pip install qrcode)
import qrcode
your_data = 'something'
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(your_data)
qr.make(fit=True)
img = qr.make_image()
img.save("qrcode.png")
另一個qr套件 (pip intall MyQR)
from MyQR import myqr
myqr.run(words = 'hi my friend',
picture='rick-roll-rick-ashley.gif',
version = 6,
level = 'H',
colorized = True,
save_name = '動態qrcode.gif')
甚至可以利用容錯特性加上logo
參考資料
Andy的條碼世界
Barcoding Frequently Asked Questions (FAQ)
線上生成條碼,條碼生成器
商品條碼的運作原理 | 一探啾竟 第9集 | 啾啾鞋
QR Code發展與歷史介紹:運作原理、特色、編碼結構分析