チェックデジット(モジュラス11用)の計算

    /**
    * チェックデジット計算処理をします。(モジュラス11用)
    * <p>
    * 1.チェックデジット対象文字列を個々の数値に分解しウェイトを掛ける<br>
    * 2.ウェイト掛けた後の数値をすべて足す。<br>
    * 3.足した結果をモジュラス(11)で割り余りを求める<br>
    * 4.チェックデジットを求める<br>
    * 4-1. 3の余りが0または1の場合、0を保持する。<br>
    * 4-2. 3の余りが0または1以外の場合、11より余りを差し引いた値を求め保持する。<br>
    * 5.4で求めたチェックデジットをString型にして返却する。<br>
    * @param value チェックデジット対象文字列
    * @param maxlength 最大桁数
    * @return String チェックデジット
    */
   public static String getCheckDigitModulus11(String value) {

       value = reverse(value);
       int maxlength = value.length();

       String checkDigitValue = null;
       long modulus11 = 11;

       // 分割後の文字列格納変数
       long divisions[] = new long[maxlength];

       // チェックデジット対象文字列を個々の数値に分解し、ウェイトを掛ける
       for (int i = 0; i < maxlength; i++) {

           long division = 0;
           division = Long.parseLong(value.substring(i, i+1));

           // 配列の添え字が偶数のときは1を掛けて奇数のときは3を掛ける
           divisions[i] = division * (i % 6 + 2);
       }

       // 分割した数値をすべて足す
       long plusValue = 0;
       for (int i = 0; i < maxlength; i++) {
           plusValue = plusValue + divisions[i];
       }

       // 足した結果をモジュラス(11)で割り余りを求める
       long remainder = 0;
       remainder = plusValue % modulus11;

       if (remainder == 0 || remainder == 1) {
           checkDigitValue = String.valueOf(0);
       } else {
           checkDigitValue = String.valueOf(11 - remainder);
       }

       return checkDigitValue;
   }

    /**
    * 文字列を逆順にして返す
    * @param str 文字列
    * @return 逆順にした文字列
    */
    public static String reverse(String str) {
        //反転した文字列(返り値)
        String ret = "";

        //文字列を反転する
        int length = str.length();
        for(int i = length - 1; i >= 0; i--) {
            ret += str.charAt(i);
        }

        //反転した文字列を返す
        return ret;
    }