1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.validator.routines.checkdigit;
18
19 import java.io.BufferedReader;
20 import java.io.InputStreamReader;
21 import java.util.ArrayList;
22 import java.util.List;
23
24 import org.junit.Assert;
25
26
27
28
29
30
31
32
33 public class IBANCheckDigitTest extends AbstractCheckDigitTest {
34
35
36
37
38
39 public IBANCheckDigitTest(String name) {
40 super(name);
41 checkDigitLth = 2;
42 }
43
44
45
46
47 @Override
48 protected void setUp() throws Exception {
49 super.setUp();
50 routine = IBANCheckDigit.IBAN_CHECK_DIGIT;
51 valid = new String[] {
52 "AD1200012030200359100100",
53 "AE070331234567890123456",
54 "AL47212110090000000235698741",
55 "AT611904300234573201",
56 "AZ21NABZ00000000137010001944",
57 "BA391290079401028494",
58 "BE62510007547061",
59 "BE68539007547034",
60 "BG80BNBG96611020345678",
61 "BH67BMAG00001299123456",
62 "BR1800000000141455123924100C2",
63 "BY13NBRB3600900000002Z00AB00",
64 "CH3900700115201849173",
65 "CH9300762011623852957",
66 "CR05015202001026284066",
67 "CY17002001280000001200527600",
68 "CZ6508000000192000145399",
69 "DE89370400440532013000",
70 "DK5000400440116243",
71 "DO28BAGR00000001212453611324",
72 "EE382200221020145685",
73 "ES8023100001180000012345",
74 "FI2112345600000785",
75 "FO6264600001631634",
76 "FR1420041010050500013M02606",
77 "GB29NWBK60161331926819",
78 "GI75NWBK000000007099453",
79 "GL8964710001000206",
80 "GR1601101250000000012300695",
81 "GT82TRAJ01020000001210029690",
82 "HR1210010051863000160",
83 "HU42117730161111101800000000",
84 "IE29AIBK93115212345678",
85 "IL620108000000099999999",
86 "IQ98NBIQ850123456789012",
87 "IS140159260076545510730339",
88 "IT60X0542811101000000123456",
89 "JO94CBJO0010000000000131000302",
90 "KW81CBKU0000000000001234560101",
91 "KZ86125KZT5004100100",
92 "LB62099900000001001901229114",
93 "LC55HEMM000100010012001200023015",
94 "LI21088100002324013AA",
95 "LT121000011101001000",
96 "LU280019400644750000",
97 "LV80BANK0000435195001",
98 "MC5811222000010123456789030",
99 "MD24AG000225100013104168",
100 "ME25505000012345678951",
101 "MK07250120000058984",
102 "MR1300020001010000123456753",
103 "MT84MALT011000012345MTLCAST001S",
104 "MU17BOMM0101101030300200000MUR",
105 "NL39RABO0300065264",
106 "NL91ABNA0417164300",
107 "NO9386011117947",
108 "PK36SCBL0000001123456702",
109 "PL27114020040000300201355387",
110 "PL60102010260000042270201111",
111 "PS92PALS000000000400123456702",
112 "PT50000201231234567890154",
113 "QA58DOHB00001234567890ABCDEFG",
114 "RO49AAAA1B31007593840000",
115 "RS35260005601001611379",
116 "SA0380000000608010167519",
117 "SC18SSCB11010000000000001497USD",
118 "SE3550000000054910000003",
119 "SI56191000000123438",
120 "SK3112000000198742637541",
121 "SM86U0322509800000000270100",
122 "ST68000100010051845310112",
123 "SV62CENR00000000000000700025",
124 "TL380080012345678910157",
125 "TN5910006035183598478831",
126 "TR330006100519786457841326",
127 "UA213223130000026007233566001",
128 "VA59001123000012345678",
129 "VG96VPVG0000012345678901",
130 "XK051212012345678906",
131
132
133
134
135
136
137
138 "AA0200000000053",
139 "AA9700000000089",
140 "AA9800000000071",
141 "ZZ02ZZZZZZZZZZZZZZZZZZZZZZZZZ04",
142 "ZZ97ZZZZZZZZZZZZZZZZZZZZZZZZZ40",
143 "ZZ98ZZZZZZZZZZZZZZZZZZZZZZZZZ22",
144 };
145
146
147
148
149
150 invalid = new String[] {
151 "510007+47061BE63",
152 "IE01AIBK93118702569045",
153 "AA0000000000089",
154 "AA9900000000053",
155 };
156 zeroSum = null;
157 missingMessage = "Invalid Code length=0";
158
159 }
160
161
162
163
164 @Override
165 public void testZeroSum() {
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180 }
181
182
183
184
185
186
187
188 @Override
189 protected String[] createInvalidCodes(String[] codes) {
190 List<String> list = new ArrayList<String>();
191
192
193 for (int i = 0; i < codes.length; i++) {
194 String code = removeCheckDigit(codes[i]);
195 String check = checkDigit(codes[i]);
196 for (int j = 2; j <= 98; j++) {
197 String curr = j > 9 ? "" + j : "0" + j;
198 if (!curr.equals(check)) {
199 list.add(code.substring(0, 2) + curr + code.substring(4));
200 }
201 }
202 }
203
204 return list.toArray(new String[list.size()]);
205 }
206
207
208
209
210
211
212
213 @Override
214 protected String removeCheckDigit(String code) {
215 return code.substring(0, 2) + "00" + code.substring(4);
216 }
217
218
219
220
221
222
223
224 @Override
225 protected String checkDigit(String code) {
226 if (code == null || code.length() <= checkDigitLth) {
227 return "";
228 }
229 return code.substring(2, 4);
230 }
231
232 public void testOther() throws Exception {
233 BufferedReader rdr = null;
234 try {
235 rdr = new BufferedReader(
236 new InputStreamReader(
237 this.getClass().getResourceAsStream("IBANtests.txt"),"ASCII"));
238 String line;
239 while((line=rdr.readLine()) != null) {
240 if (!line.startsWith("#") && line.length() > 0) {
241 if (line.startsWith("-")) {
242 line = line.substring(1);
243 Assert.assertFalse(line, routine.isValid(line.replaceAll(" ", "")));
244 } else {
245 Assert.assertTrue(line, routine.isValid(line.replaceAll(" ", "")));
246 }
247 }
248 }
249 } finally {
250 if (rdr != null) {
251 rdr.close();
252 }
253 }
254 }
255 }