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.strategy.util.Strategy00AlikeHelper;
23 import net.sf.plausj.bank.german.strategy.util.Strategy06AlikeHelper;
24
25 /**
26 * @author ninan
27 *
28 */
29 public class Strategy86 implements Strategy {
30
31 private static final int[] multiplicatorsMethodA = new int[] { 0, 0, 0, 1,
32 2, 1, 2, 1, 2 };
33
34 private static final int[] multiplicatorsMethodB = new int[] { 0, 0, 0, 7,
35 6, 5, 4, 3, 2 };
36
37 /**
38 * @see net.sf.plausj.bank.german.strategy.Strategy#calculateCheckDigit(net.sf.plausj.bank.german.BankCode,
39 * net.sf.plausj.bank.german.AccountCode)
40 */
41 public CheckDigit calculateCheckDigit(final BankCode bankCode,
42 final AccountCode accountCode) {
43
44 if (9 == accountCode.getDigitAtPos(2)) {
45 return calculateException(accountCode);
46 } else {
47 CheckDigit cd = calculateMethodA(accountCode);
48 if (!accountCode.matchesCheckDigit(cd)) {
49 cd = calculateMethodB(accountCode);
50 }
51 return cd;
52 }
53
54 }
55
56 private CheckDigit calculateMethodA(final AccountCode accountCode) {
57
58 int sum = Strategy00AlikeHelper.calculateSum(accountCode,
59 multiplicatorsMethodA);
60 int cd = Strategy00AlikeHelper.getCheckDigitFromSum(sum);
61
62 return new CheckDigit(9, cd);
63 }
64
65 private CheckDigit calculateMethodB(final AccountCode accountCode) {
66
67 int sum = Strategy06AlikeHelper.calculateSum(accountCode,
68 multiplicatorsMethodB);
69 int cd = Strategy06AlikeHelper.getCheckDigitFromSum(sum);
70
71 return new CheckDigit(9, cd);
72 }
73
74 private CheckDigit calculateException(final AccountCode accountCode) {
75 Strategy s = new Strategy51();
76 return s.calculateCheckDigit(null, accountCode);
77 }
78
79 }