昔、バーコードバトラーというおもちゃがありました。
そこら辺にあるバーコードをスキャンすると、戦闘力が出て、友達が持ってるバーコードと戦うことができます。
とにかく片っ端からスキャンしていって、高い戦闘力をもつバーコードをかき集めることが重要なゲームですw
今でもあるんだろうか。。。
JAN/EANコードのチェックディジットを計算するサンプル
サンプルで3つのJANコード(JAN-13,JAN-8)を最終の1桁(チェックディジット)を除いて、チェックディジットを計算するメソッドに渡します。
渡されたコード、計算されたチェックディジット(1桁)、これを合わせて完成したコードを標準出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | public class JanCheckDigitTest { public static void main(String[] args) { // //C/D 1桁を落として渡す。(C/Dは計算させる) // //JAN13 - 4901004006806 やっぱり500mlを買わなきゃw calcCheckDigit("490100400680"); //JAN13 - 4901810658411 意外とおいしいw calcCheckDigit("490181065841"); //JAN8 - 49401455 calcCheckDigit("4940145"); } public static void calcCheckDigit(String jan) { if(jan == null || jan.length() == 0) { return ; } String source = jan; //12桁まで"0"埋め(JAN8対応) jan = padZero(jan); //C/D計算 int sum = 0; for(int i=0 ; i<jan.length() ; i++) { if(i % 2 == 0) { sum += 1 * Integer.parseInt(jan.substring(i,i+1)); }else { sum += 3 * Integer.parseInt(jan.substring(i,i+1)); } } int cd = 10 - (sum % 10); if(cd == 10) { cd = 0; } System.out.println("-----------------------------------------------"); System.out.println("引数のJAN(C/D落とし):" + source); System.out.println("計算したC/D:" + cd); System.out.println("できあがりのJAN:" + source + cd); System.out.println("-----------------------------------------------"); } public static String padZero(String target) { if(target.length() == 12) { return target; } target = "000000000000" + target; return target.substring(target.length() - 12); } } |
実行結果
サンプルで渡された3つのコードそれぞれに対して、渡されたコード、計算されたチェックディジット(1桁)、これを合わせて完成したコードが標準出力されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ----------------------------------------------- 引数のJAN(C/D落とし):490100400680 計算したC/D:6 できあがりのJAN:4901004006806 ----------------------------------------------- ----------------------------------------------- 引数のJAN(C/D落とし):490181065841 計算したC/D:1 できあがりのJAN:4901810658411 ----------------------------------------------- ----------------------------------------------- 引数のJAN(C/D落とし):4940145 計算したC/D:5 できあがりのJAN:49401455 ----------------------------------------------- |
サンプルの解説
多くのバーコードには、正しくスキャンができたかどうかをチェックできるように、チェックディジットが仕込まれています。
JAN/EANコードのチェックディジットは「モジュラス10/ウェイト3」という方式で計算します。
ざっくり言うと・・・、
(1) 各桁毎に1,3,1,3….を掛けたものを、全て足す。(4*1+9*3+0*1+1*3+…)
(2) (1)の結果から、下1桁を取得する。
(3) (2)の結果を、10から引くと、下1桁がチェックディジット。
詳しい計算方法が知りたい方は、以下のページを見てください。
参考:チェックデジットの計算方法(一般財団法人 流通システム開発センター)