1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package net.sf.plausj.bank.german.strategy;
18
19 import net.sf.plausj.bank.german.AccountCode;
20 import net.sf.plausj.bank.german.BankCode;
21 import net.sf.plausj.bank.german.CheckDigit;
22 import net.sf.plausj.bank.german.util.MathHelper;
23
24 /**
25 * @author ninan
26 *
27 */
28 public class Strategy24 implements Strategy {
29
30 private static final int[] multiplicators = new int[] { 1, 2, 3 };
31
32 /**
33 * @see net.sf.plausj.bank.german.strategy.Strategy#calculateCheckDigit(net.sf.plausj.bank.german.BankCode,
34 * net.sf.plausj.bank.german.AccountCode)
35 */
36 public CheckDigit calculateCheckDigit(final BankCode bankCode,
37 final AccountCode accountCode) {
38
39 int sum = 0;
40
41 for (int i = 0, m = 0; i < AccountCode.ACCOUNT_CODE_MAX_LENGTH - 1; ++i) {
42 if (sum == 0 && accountCode.getDigitAtPos(i) == 0) {
43 continue;
44 }
45 if (i == 0 && accountCode.getDigitAtPos(i) == 9) {
46 i = 2;
47 continue;
48 }
49 int t = (accountCode.getDigitAtPos(i) * multiplicators[m])
50 + multiplicators[m];
51 sum += t % 11;
52
53 if (m < 2) {
54 m++;
55 } else {
56 m = 0;
57 }
58 }
59
60 int cd = MathHelper.getLastDigits(sum, 1);
61
62 return new CheckDigit(9, cd);
63
64 }
65 }