EAN-13
產品的條形碼協議和標準
EuropeanArticleNumber(歐洲物品編碼的縮寫),其中共計13位代碼的EAN-13是比較通用的一般終端產品的條形碼協議和標準,主要應用於超級市場和其它零售業,因此這種是我們比較常見的,隨便拿起身邊的一個從超市買來的商品都可以從包裝上看得到。
中華人民共和國可用的國家代碼有690-699,其中696-699尚未使用。生活中最常見的國家代碼為690-693,其中以690、691開頭時,廠商識別碼為四位,商品項目代碼為五位;以692、693開頭時,廠商識別碼是五位,商品項目代碼是四位。
如右圖所示,EAN-13商品條碼是表示EAN/UCC-13商品標識代碼的條碼符號,由左側空白區、起始符、左側數據符、中間分隔符、右側數據符、校驗符、終止符、右側空白區及供人識別字元組成。
左側空白區:位於條碼符號最左側與空的反射率相同的區域,其最小寬度為11個模塊寬。
起始符:位於條碼符號左側空白區的右側,表示信息開始的特殊符號,由3個模塊組成。
左側數據符:位於起始符右側,表示6位數字信息的一組條碼字元,由42個模塊組成。
中間分隔符:位於左側數據符的右側,是平分條碼字元的特殊符號,由5個模塊組成。
EAN-13右側空白區“〉”的位置
終止符:位於條碼符號校驗符的右側,表示信息結束的特殊符號,由3個模塊組成。
右側空白區:位於條碼符號最右側的與空的反射率相同的區域,其最小寬度為7個模塊寬。為保護右側空白區的寬度,可在條碼符號右下角加“>”符號。見右圖。
供人識讀字元:位於條碼符號的下方,是與條碼字元相對應的供人識別的13位數字,最左邊一位稱前置碼。供人識別字元優先選用OCR-B字符集,字元頂部和條碼底部的最小距離為0.5個模塊寬。標準版商品條碼中的前置碼印製在條碼符號起始符的左側。
數據字元
條碼字元的構成
商品條碼可表示10個數字字元:0~9。
條碼的二進位表示方法有三個子集:A、B和C。
數字字元 | A子集 | B子集 | C子集 |
0001101 | 0100111 | 1110010 | |
1 | 0011001 | 0110011 | 1100110 |
2 | 0010011 | 0011011 | 1101100 |
3 | 0111101 | 0100001 | 1000010 |
4 | 0100011 | 0011101 | 1011100 |
5 | 0110001 | 0111001 | 1001110 |
6 | 0101111 | 0000101 | 1010000 |
7 | 0111011 | 0010001 | 1000100 |
8 | 0110111 | 0001001 | 1001000 |
9 | 0001011 | 0010111 | 1110100 |
1.A子集中條碼字元所包含的條的模塊的個數為奇數,稱為奇排列;
2.B、C子集中條碼字元所包含的條的模塊的個數為偶數,稱為偶排列。
商品條碼的輔助字元
商品條碼起始符、終止符、中間分隔符示意圖
EAN-13商品條碼數據符
EAN-13商品條碼中的前置碼不用條碼字元表示,不包括在左側數據符內。右側數據符及校驗符均用字符集中的C子集表示。選用A子集還是B子集表示左側數據符取決於前置碼的數值。下表中列出了左側數據符的字符集的選擇規則:
前置碼 | 左1 | 左2 | 左3 | 左4 | 左5 | 左6 |
A | A | A | A | A | A | |
1 | A | A | B | A | B | B |
2 | A | A | B | B | A | B |
3 | A | A | B | B | B | A |
4 | A | B | A | A | B | B |
5 | A | B | B | A | A | B |
6 | A | B | B | B | A | A |
7 | A | B | A | B | A | B |
8 | A | B | A | B | B | A |
9 | A | B | B | A | B | A |
EAN-13商品條碼校驗符
EAN-13商品條碼中的校驗符用字符集中的C子集表示,校驗符的作用是檢驗前面12個數字是否正確,在條碼機每次讀入數據時,都會計算一次數據符的校驗並與校驗符進行比對。校驗符的計算方法非常簡單,將12個數據符從左起將所有的奇數位相加得出一個數a,將所有的偶數位相加得出一個數b,然後將數b乘以3再與a相加得到數c,用10減去數c的個位數,如果結果不為10則檢驗符為結果本身,如果為10則檢驗符為0。
示例
例如:690123456789
690表示商品代碼:日用品
1234表示生產商代碼
56789表示產品代碼
計算其校驗符的過程為:
奇數位和:
偶數位和:
將奇數位和與偶數位和的三倍相加:
取結果的個位數:128的個位數為8
用10減去這個個位數:
所以校驗碼為2
(註:如果取結果的個位數為0,那麼校驗碼不是為,而是0。)
前置碼:6
左側數據符:901234,按ABBBAA子集方式繪製條碼
右側數據符:567892,按CCCCCC子集方式繪製條碼
用條碼錶示:
左側空白區(11個模塊)
起始符(3個模塊):101
左側數據符(42個模塊):0001011(9)0100111(0)0110011(1)0011011(2)0111101(3)0100011(4)
中間分隔符(5個模塊):01010
右側數據符(42個模塊):1001110(5)1010000(6)1000100(7)1001000(8)1110100(9)1101100(2)
結束符(3個模塊):101
右側空白區(7個模塊):0000000
畫出這個條碼:
自製條形碼
這個表說明了EAN-13條碼中的每個數位應該如何編碼,這要取決於這個數位位於條碼的哪半邊(左邊還是右邊)。在這種情況下,一個左手邊數位的編碼(奇數性還是偶數性)將取決於數制碼的第一個數位的值(見圖2中奇偶性編碼)。
圖2
觀察發現:
一個EAN-13字元使用7個元素來描述,包含2個條和2個空間。任何條或空間的長度都不會超過4個元素。唯一的例外情況就是左警戒條和右警戒條(都是3個元素)以及中間警戒條(5個元素長)。
條碼左手邊的所有字元總是以0(空間)開始的,而條碼右手邊的所有字元都是以1(條)開始的。
如果把1變成0,把0變成1,那麼“右手邊”編碼模式和“左手邊奇數”編碼模式是完全相同的。
“左手邊偶數”編碼模式是基於“左手邊奇數”編碼模式的。為了得到偶數編碼,可以按照如下步驟對左手邊編碼模式進行操作:1)把所有的1變成0,0變成1。2)將得到的結果編碼反著讀(從右到左)就得到了“左手邊偶數”編碼模式 。
下表說明了條碼左手邊每個字元按照哪種奇偶性進行編碼。奇偶性取決於EAN-13值的第一個數位。例如,我們的CD的EAN-13值是0075678164125。在這個條碼中,數制碼的第一個數位就是第一個“0”,所以,奇偶性就應該遵循下表中的數字0一行:
觀察得到:
圖3
第二個數制位總是按照奇數性進行編碼(這在解碼時很重要)。
一個UPC-A條碼的第一個數制位總是0,因此,全部使用奇數性。實際上,任何第一個數值位是0的EAN-13符號其實是一個UPC-A符號,而不是一個EAN-13符號。
所有EAN-13符號(那些第一個數制位不是0的)始終有3個左手邊字元採用偶數性編碼,有2個採用奇數性編碼。
最後那兩個表是EAN-13編碼的關鍵和核心,並且兼容現有的UPC-A符號。
編碼示例
這個例子將對值“7501031311309”進行EAN-13編碼。“75”是數制,“01031”是廠商碼,“31130”是產品碼(“9”是校驗位,在本例中我們還是要進行計算)。這是墨西哥的12盎司一聽的百事可樂上的條碼。
首先,我們計算校驗位(如圖4):
EAN-13
計算加權和。我們需要給51加上9以保證能整除10(),因此,校驗位就是9。這和我們在條碼後面看到的那個“9”是一致的,說明我們計算對了。
接下來,我們觀察數制碼的第一個數位(條碼中最左邊的那個數位)是數字“7”。參照奇偶性編碼表中的數字“7”,我們可以知道第二個數制位和廠商碼應該按照“奇/偶/奇/偶/奇/偶”的模式進行編碼。這就是說第二個數制位將按照“左手邊奇數”性表進行編碼,廠商碼的第一個數位應該按照“左手邊偶數”性編碼的,等等。現在,我們可以按照如下步驟來編製條碼。之後將所有字元串連接起來就構成了最終的條碼。
● ● 左警戒條(總是相同的):101.
● ● 第二數制位[5]:按照左手邊奇數性進行編碼,0110001.
● ● 廠商碼第1個數位[0]:按照左手邊偶數性進行編碼,0100111.
● ● 廠商碼第2個數位[1]:按照左手邊奇數性進行編碼,0011001.
● ● 廠商碼第3個數位[0]:按照左手邊偶數性進行編碼,0100111.
● ● 廠商碼第4個數位[3]:按照左手邊奇數性進行編碼,0111101.
● ● 廠商碼第5個數位[1]:按照左手邊偶數性進行編碼,0110011.
● ● 中間警戒條(總是相同的):01010.
● ● 產品碼第1個數位[3]:按照右手邊字元進行編碼,1000010.
● ● 產品碼第2個數位[1]:按照右手邊字元進行編碼,1100110.
● ● 產品碼第3個數位[1]:按照右手邊字元進行編碼,1100110.
● ● 產品碼第4個數位[3]:按照右手邊字元進行編碼,1000010.
● ● 產品碼第5個數位[0]:按照右手邊字元進行編碼,1110010.
● ● 校驗位[9]:按照右手邊字元進行編碼,1110100.
● ● 右邊警戒條(總是相同的):101.
記住,一個“1”代表一個條,一個“0”代表一個空間。因此,我們可以將這個數字字元串轉換成他們的圖形表示形式,最終我們可以得到如下條形碼: