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 Strategy17 implements Strategy {
29
30 private static final int[] multiplicators = new int[] { 0, 1, 2, 1, 2, 1, 2 };
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 for (int i = 0; i < AccountCode.ACCOUNT_CODE_MAX_LENGTH - 3; ++i) {
41 int t = accountCode.getDigitAtPos(i) * multiplicators[i];
42 if (t >= 10 && i % 2 == 0) {
43 t = MathHelper.calcCrossTotal(t);
44 }
45 sum += t;
46 }
47
48 sum -= 1;
49
50 int mod = sum % 11;
51
52 int cd = 0;
53 if (mod > 0) {
54 cd = 10 - mod;
55 }
56
57 return new CheckDigit(7, cd);
58 }
59
60 }