Share This Post

二進位

世界上可以分成 10 種人,懂二進位的人,以及不懂二進位的人。

條碼(barcode) – 一維條碼

掃描原理

想要辨識條碼就要經過 掃描 與 解碼 兩個過程。

掃描:
當掃描器(有光筆、感光耦合元件(CCD)、雷射三種)光源發出的光在條碼上反射後,反射光照到掃描器內部的光電轉換器上,光電轉換器根據強弱不同的光訊號,轉換成相應的電訊號。

解碼:
電訊號輸出到放大電路增強訊號之後,再送到整形電路將類比訊號轉換成數位訊號。


商品條碼的結構與編碼方式


▲ 以EAN-13來舉例

條碼的結構

靜區:空白區域,除了能防止條碼周圍被占用,左空白也能讓掃描設備做好掃描準備,右空白則是保證掃描設備正確識別條碼的結束標記。

起始字元:第一位字元,具有特殊結構,當掃描器讀取到該字元時,就代表正式讀取代碼了。

資料字元:條碼的資料內容。(不同條碼種類有不同的編碼規則,甚至同種也會有不同的編碼規則)

校驗字元:檢驗讀取到的資料是否正確。(不同條碼種類可能會有不同的校驗規則)

終止字元:最後一位字元,具有特殊結構,掃描器讀取到該字元時,表示代碼掃描完畢,甚至還能作為二次校驗。

編碼方式


▲ EAN-13的各代碼意義

EAN條碼之字元編碼構造
左資料碼與右資料碼
檢查碼
4710018165108
B13B12B11B10B9B8B7B6B5B4B3B2C
  1. 先將B2,B4,B6,B8,B10,B12的值相加起來,然後乘以3
    (0+5+1+1+0+7)*3=42
  2. 將B3,B5,B7,B9,B11,B13的值相加起來
    (1+6+8+0+1+4)=20
  3. 將步驟1的值 加上 步驟2的值,取其個位數
    42+20=62, 取個位數2
  4. 用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發展與歷史介紹:運作原理、特色、編碼結構分析

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。