1. 程式人生 > >一維條形碼檢測與識別原理

一維條形碼檢測與識別原理

最近在學習的內容之一,整理一下,圖片均為網路圖片。提及的條形碼主要為EAN-13碼。

一、概念

條形碼由寬度不同、反射率不同的條(黑色)和空(白色)組成。按照特定的編碼規則編制,用來表達一組數字、字母資訊的圖形識別符號。
工業25碼
這裡寫圖片描述
EAN-13碼
這裡寫圖片描述
為什麼用黑色、白色來表示條形碼?
因為兩種顏色有截然不同的反射率,眾所周知,黑色吸收光中的所有顏色,白色反射光中的所有顏色。當然,也可以用其他兩種顏色來表示條形碼,只要兩種顏色有不同的反射率,足夠的對比度。

二、EAN-13碼

EAN-13碼是EAN碼的一種,用13個字元表示資訊,是我國主要採取的編碼標準。EAN-13碼包含商品的名稱、型號、生存廠商、所有國家地區等等資訊。
EAN碼是模組組合型條碼。
模組:

組成條碼的基本寬度單位。說白了,條形碼上,每0.33毫米寬代表一個模組。一個模組寬的條(條形碼黑色部分)表示二進位制“1”,兩個模組寬的條(黑)表示二進位制“11“,一個模組寬的空(條形碼白色部分)表示二進位制”0“。
這樣,便可以用二進位制的0、1表示資訊。在EAN碼上,每一個字元(例如:數字1),由兩個條(黑)和兩個空(白)組成,條和空又分別由1~4個同寬、同顏色的模組組成。每個字元總共有7個模組(寬),並規定每個字元從外觀上包含兩個條、兩個空。所以EAN碼又稱(7,2)碼。
一個字元:c1表示條的寬度(模組),c2(空),c3(條),c4(空) (c1+c2+c3+c4=7)
這裡寫圖片描述
EAN-13碼的格式如圖:

這裡寫圖片描述
以上節EAN-13碼例圖來說明:
501(製造碼),2345(製造商程式碼),67890商品標識程式碼,0(校驗碼)。
注意:EAN-13碼,在以圖形識別符號表示時,第1位(例:上圖數字”5“)隱式表示,既不用條和空(表示),而用第2位~第7位(總六位)的奇偶性來隱式表示(後面會說)。

現在,第一位用隱式表示,那麼只需要表示13-1=12個字元,將12個字元,分成兩半,左側6個字元,右側6個字元。
左側字元有奇偶性,右側字元全是偶的。左側的奇偶性取決於 隱式表示的第一位字元(前置符,即:EAN-13碼格式中的F1)。具體奇偶性如圖:E代表偶數位,O代表奇數位,如前置符0表示,左側六個字元都是奇數位。
這裡寫圖片描述


那麼奇、偶數位有什麼用呢?
相同字元在偶數位、和奇數位的二進位制表示是不一樣的。如圖:
這裡寫圖片描述

校驗碼有什麼用?
EAN-13碼最後一個字元是校驗碼,用來保證條形碼識別的正確性。
EAN-13碼校驗演算法如下:
(1)從右至左,將13個字元按順序排序。
(2)第2、4、6、8、10、12等偶數位的資料相加,將結果乘以3,得P.
(3)將3、5、7、9、11、13等奇數位資料相加,等N。
(4)N+P得 M
(5)用M除以10,取餘數。求餘數以10為模的補數 C。
(6)若C與 校驗碼 數值相等,則譯碼正確。

EAN-13碼識別原理

這裡寫圖片描述
如圖,表示條形碼的一個字元。
C1,C2,C3,C4表示該字元中四個相鄰的條(黑)或空(白)的寬度,T是一個字元的寬度。C1+C2+C3+C4=7(模組)
用n表示一個模組的寬度,n=T/7。
用mi=Ci/n,i=1,2,3,4,便可以得到編碼。
若m1=1,m2=3,m3=1,m4=2,且條碼排列位條——空——條——空,則當前字元二進位制編碼為 1 000 1 00,是右側偶字元“7”。
這種方法只是最基本的識別方法,當條空間距較小,或印刷質量不好時,很容易識別錯誤。
條形碼識別的方法還有許多,網上有許多資料,有興趣的朋友可以自行學習。

相關係列