2015年6月5日 星期五

「JAVA」EAN13 條碼

歷史:



國際商品條碼(International Article Number),

即歐洲商品條碼(European Article Number, EAN),

是原來只是歐洲範圍內的、而現在已是全球範圍內產品交易的商品代碼。

為了適應讀碼器辨認的需要,這些代碼又被做成大家熟知的一維條碼


EAN有8位數字13位數字之分,13位的組成是這樣的:

國家代碼(前3位)
生產商代碼(後4位)

前7位代碼由各國的EAN管理發放


貨品代碼(再5位)

這5位代碼由廠商自己定義
計算機校驗碼(最後1位)


也就是說實際能用的只有12碼,最後一碼是驗證碼。


例如台灣發放的條碼前3碼就是471 ,日本是450~459 。 


8位的EAN是專門為小商品設置的代碼,所以其組成部分和13位EAN是不同的。


規則:



接下來說明EAN 13 產生驗證碼的規則

位置          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;

    }



}


資料來源:

沒有留言:

張貼留言