歷史:
國際商品條碼(International Article Number),
即歐洲商品條碼(European Article Number, EAN),
是原來只是歐洲範圍內的、而現在已是全球範圍內產品交易的商品代碼。
為了適應讀碼器辨認的需要,這些代碼又被做成大家熟知的一維條碼。
國家代碼(前3位)
生產商代碼(後4位)
生產商代碼(後4位)
前7位代碼由各國的EAN管理發放
貨品代碼(再5位)
這5位代碼由廠商自己定義
計算機校驗碼(最後1位)
也就是說實際能用的只有12碼,最後一碼是驗證碼。
例如台灣發放的條碼前3碼就是471 ,日本是450~459 。
8位的EAN是專門為小商品設置的代碼,所以其組成部分和13位EAN是不同的。
T3=(T1+T2 ) 後取最右邊數值1位
C=10-T3
實際來運算一次
T1= (6+0+3+0+2+7)*3 =54
T2= (0+1+2+3+1+4)=11
T3=54 +11 =65 ---> 5
C=10-T3=5
因此條碼加上檢查碼為
4 7 1 2 3 0 2 3 1 0 0 6 5
資料來源:
規則:
接下來說明EAN 13 產生驗證碼的規則
T1 = (C+A+8+6+4+2) *3
T2 =(B+9+7+5+3+1)
位置 1 2 3 4 5 6 7 8 9 A B C
條碼內容 4 7 1 2 3 0 2 3 1 0 0 6 T1 = (C+A+8+6+4+2) *3
T2 =(B+9+7+5+3+1)
T3=(T1+T2 ) 後取最右邊數值1位
C=10-T3
實際來運算一次
T1= (6+0+3+0+2+7)*3 =54
T2= (0+1+2+3+1+4)=11
T3=54 +11 =65 ---> 5
C=10-T3=5
因此條碼加上檢查碼為
4 7 1 2 3 0 2 3 1 0 0 6 5
程式碼:
package ean13; public class Ean13 { public static void main(String[] args) { //條碼資料12碼 String data = "12345678901"; int checkSum = cul_checksum(data); System.out.println(addZeroForNum(data + String.valueOf(checkSum), 13)); } private static int cul_checksum(String data) { int checksum = 0; int T1 = 0; int T2 = 0; String T3; //確認長度為12,不足補0 data = addZeroForNum(data, 12); for (int i = 0; i < data.length(); i++) { if (i % 2 == 0) { T2 += Integer.parseInt(data.substring(i, i + 1)); } else { T1 += Integer.parseInt(data.substring(i, i + 1)); } } T1 = T1 * 3; T3 = String.valueOf((T1 + T2)); T3 = T3.substring(T3.length() - 1); checksum = 10 - Integer.parseInt(T3); return checksum; } //計算補0 public static String addZeroForNum(String str, int strLength) { int strLen = str.length(); if (strLen < strLength) { while (strLen < strLength) { StringBuffer sb = new StringBuffer(); sb.append("0").append(str);// 左補0 str = sb.toString(); strLen = str.length(); } } return str; } }
沒有留言:
張貼留言