View Javadoc
1   /*
2    * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
3    */
4   package de.powerstat.validation.values.impl;
5   
6   
7   import de.powerstat.validation.values.Country;
8   // import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
9   
10  
11  /**
12   * Abstract factory for country specific IBAN verifiers.
13   *
14   * TODO Generate this class
15   */
16  // @SuppressFBWarnings({"CC_CYCLOMATIC_COMPLEXITY", "CE_CLASS_ENVY"})
17  @SuppressWarnings({"java:S1541", "java:S3242"})
18  public final class IBANVerifierAbstractFactory
19   {
20    /**
21     * Private constructor.
22     */
23    private IBANVerifierAbstractFactory()
24     {
25      super();
26     }
27  
28  
29    /**
30     * Create IBAN verifier for country.
31     *
32     * @param country Country
33     * @return IBANVerifier object for country
34     */
35    @SuppressWarnings("java:S1479")
36    public static IBANVerifier createIBANVerifier(final Country country)
37     {
38      switch (country.stringValue())
39       {
40        case "EG": //$NON-NLS-1$
41          return IBANVerifier.of(27, "^EG[0-9]{2}[0-9]{23}$"); //$NON-NLS-1$
42        case "AL": //$NON-NLS-1$
43          return IBANVerifier.of(28, "^AL[0-9]{2}[0-9]{7}[0-9A-Z][0-9]{16}$"); //$NON-NLS-1$
44        case "DZ": //$NON-NLS-1$
45          return IBANVerifier.of(24, "^DZ[0-9]{2}[0-9]{18}[0-9A-Z]{2}$"); //$NON-NLS-1$
46        case "AD": //$NON-NLS-1$
47          return IBANVerifier.of(24, "^AD[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
48        case "AO": //$NON-NLS-1$
49          return IBANVerifier.of(25, "^AO[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$
50        case "AZ": //$NON-NLS-1$
51          return IBANVerifier.of(28, "^AZ[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
52        case "BH": //$NON-NLS-1$
53          return IBANVerifier.of(22, "^BH[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
54        case "BE": //$NON-NLS-1$
55          return IBANVerifier.of(16, "^BE[0-9]{2}[0-9]{10}[0-9A-Z]{2}$"); //$NON-NLS-1$
56        case "BJ": //$NON-NLS-1$
57          return IBANVerifier.of(28, "^BJ[0-9]{2}[0-9]{22}[0-9A-Z]{2}$"); //$NON-NLS-1$
58        case "BA": //$NON-NLS-1$
59          return IBANVerifier.of(20, "^BA[0-9]{2}[0-9]{14}[0-9A-Z]{2}$"); //$NON-NLS-1$
60        case "BR": //$NON-NLS-1$
61          return IBANVerifier.of(29, "^BR[0-9]{2}[0-9]{25}$"); //$NON-NLS-1$
62        case "VG": //$NON-NLS-1$
63          return IBANVerifier.of(24, "^VG[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
64        case "BG": //$NON-NLS-1$
65          return IBANVerifier.of(22, "^BG[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
66        case "BF": //$NON-NLS-1$
67          return IBANVerifier.of(27, "^BF[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
68        case "BI": //$NON-NLS-1$
69          return IBANVerifier.of(16, "^BI[0-9]{2}[0-9]{12}$"); //$NON-NLS-1$
70        case "CR": //$NON-NLS-1$
71          return IBANVerifier.of(22, "^CR[0-9]{2}0[0-9]{17}$"); //$NON-NLS-1$
72        case "CI": //$NON-NLS-1$
73          return IBANVerifier.of(28, "^CI[0-9]{2}[0-9]{22}[0-9A-Z]{2}$"); //$NON-NLS-1$
74        case "DK": //$NON-NLS-1$
75          return IBANVerifier.of(18, "^DK[0-9]{2}[0-9]{13}[0-9A-Z]$"); //$NON-NLS-1$
76        case "DE": //$NON-NLS-1$
77          return IBANVerifier.of(22, "^DE[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
78        case "DO": //$NON-NLS-1$
79          return IBANVerifier.of(28, "^DO[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
80        case "SV": //$NON-NLS-1$
81          return IBANVerifier.of(28, "^SV[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
82        case "EE": //$NON-NLS-1$
83          return IBANVerifier.of(20, "^EE[0-9]{2}[0-9]{15}[0-9A-Z]$"); //$NON-NLS-1$
84        case "FO": //$NON-NLS-1$
85          return IBANVerifier.of(18, "^FO[0-9]{2}[0-9]{13}[0-9A-Z]$"); //$NON-NLS-1$
86        case "FI": //$NON-NLS-1$
87          return IBANVerifier.of(18, "^FI[0-9]{2}[0-9]{13}[0-9A-Z]$"); //$NON-NLS-1$
88        case "FR": //$NON-NLS-1$
89          return IBANVerifier.of(27, "^FR[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
90        case "GA": //$NON-NLS-1$
91          return IBANVerifier.of(27, "^GA[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
92        case "GE": //$NON-NLS-1$
93          return IBANVerifier.of(22, "^GE[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
94        case "GI": //$NON-NLS-1$
95          return IBANVerifier.of(23, "^GI[0-9]{2}[0-9]{19}$"); //$NON-NLS-1$
96        case "GR": //$NON-NLS-1$
97          return IBANVerifier.of(27, "^GR[0-9]{2}[0-9]{23}$"); //$NON-NLS-1$
98        case "GL": //$NON-NLS-1$
99          return IBANVerifier.of(18, "^GL[0-9]{2}[0-9]{13}[0-9A-Z]$"); //$NON-NLS-1$
100       case "GT": //$NON-NLS-1$
101         return IBANVerifier.of(28, "^GT[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
102       case "IQ": //$NON-NLS-1$
103         return IBANVerifier.of(23, "^IQ[0-9]{2}[0-9]{19}$"); //$NON-NLS-1$
104       case "IR": //$NON-NLS-1$
105         return IBANVerifier.of(26, "^IR[0-9]{2}[0-9]{22}$"); //$NON-NLS-1$
106       case "IE": //$NON-NLS-1$
107         return IBANVerifier.of(22, "^IE[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
108       case "IS": //$NON-NLS-1$
109         return IBANVerifier.of(26, "^IS[0-9]{2}[0-9]{12}XXXXXXXXXX$"); //$NON-NLS-1$
110       case "IL": //$NON-NLS-1$
111         return IBANVerifier.of(23, "^IL[0-9]{2}[0-9]{19}$"); //$NON-NLS-1$
112       case "IT": //$NON-NLS-1$
113         return IBANVerifier.of(27, "^IT[0-9]{2}[0-9A-Z][0-9]{22}$"); //$NON-NLS-1$
114       case "JO": //$NON-NLS-1$
115         return IBANVerifier.of(30, "^JO[0-9]{2}[0-9]{26}$"); //$NON-NLS-1$
116       case "CM": //$NON-NLS-1$
117         return IBANVerifier.of(27, "^CM[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
118       case "CV": //$NON-NLS-1$
119         return IBANVerifier.of(25, "^CV[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$
120       case "KZ": //$NON-NLS-1$
121         return IBANVerifier.of(20, "^KZ[0-9]{2}[0-9]{16}$"); //$NON-NLS-1$
122       case "QA": //$NON-NLS-1$
123         return IBANVerifier.of(29, "^QA[0-9]{2}[0-9]{25}$"); //$NON-NLS-1$
124       case "CG": //$NON-NLS-1$
125         return IBANVerifier.of(27, "^CG[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
126       case "XK": //$NON-NLS-1$ // Not an ISO3166 alpha 2 code
127         return IBANVerifier.of(20, "^XK[0-9]{2}[0-9]{16}$"); //$NON-NLS-1$
128       case "HR": //$NON-NLS-1$
129         return IBANVerifier.of(21, "^HR[0-9]{2}[0-9]{17}$"); //$NON-NLS-1$
130       case "KW": //$NON-NLS-1$
131         return IBANVerifier.of(30, "^KW[0-9]{2}[0-9]{26}$"); //$NON-NLS-1$
132       case "LV": //$NON-NLS-1$
133         return IBANVerifier.of(21, "^LV[0-9]{2}[0-9]{17}$"); //$NON-NLS-1$
134       case "LB": //$NON-NLS-1$
135         return IBANVerifier.of(28, "^LB[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
136       case "LI": //$NON-NLS-1$
137         return IBANVerifier.of(21, "^LI[0-9]{2}[0-9]{17}$"); //$NON-NLS-1$
138       case "LT": //$NON-NLS-1$
139         return IBANVerifier.of(20, "^LT[0-9]{2}[0-9]{16}$"); //$NON-NLS-1$
140       case "LU": //$NON-NLS-1$
141         return IBANVerifier.of(20, "^LU[0-9]{2}[0-9]{16}$"); //$NON-NLS-1$
142       case "MG": //$NON-NLS-1$
143         return IBANVerifier.of(27, "^MG[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
144       case "ML": //$NON-NLS-1$
145         return IBANVerifier.of(28, "^ML[0-9]{2}[0-9]{22}[0-9A-Z]{2}$"); //$NON-NLS-1$
146       case "MT": //$NON-NLS-1$
147         return IBANVerifier.of(31, "^MT[0-9]{2}[0-9]{27}$"); //$NON-NLS-1$
148       case "MR": //$NON-NLS-1$
149         return IBANVerifier.of(27, "^MR[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
150       case "MU": //$NON-NLS-1$
151         return IBANVerifier.of(30, "^MU[0-9]{2}[0-9]{23}[0-9A-Z]{3}$"); //$NON-NLS-1$
152       case "MD": //$NON-NLS-1$
153         return IBANVerifier.of(24, "^MD[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
154       case "MC": //$NON-NLS-1$
155         return IBANVerifier.of(27, "^MC[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
156       case "ME": //$NON-NLS-1$
157         return IBANVerifier.of(22, "^ME[0-9]{2}[0-9]{16}[0-9A-Z]{2}$"); //$NON-NLS-1$
158       case "MZ": //$NON-NLS-1$
159         return IBANVerifier.of(25, "^MZ[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$
160       case "NL": //$NON-NLS-1$
161         return IBANVerifier.of(18, "^NL[0-9]{2}[0-9]{14}$"); //$NON-NLS-1$
162       case "MK": //$NON-NLS-1$
163         return IBANVerifier.of(19, "^MK[0-9]{2}[0-9]{13}[0-9A-Z]{2}$"); //$NON-NLS-1$
164       case "NO": //$NON-NLS-1$
165         return IBANVerifier.of(15, "^NO[0-9]{2}[0-9]{10}[0-9A-Z]$"); //$NON-NLS-1$
166       case "AT": //$NON-NLS-1$
167         return IBANVerifier.of(20, "^AT[0-9]{2}[0-9]{16}$"); //$NON-NLS-1$
168       case "TL": //$NON-NLS-1$
169         return IBANVerifier.of(23, "^TL[0-9]{2}[0-9]{17}[0-9A-Z]{2}$"); //$NON-NLS-1$
170       case "PK": //$NON-NLS-1$
171         return IBANVerifier.of(24, "^PK[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
172       case "PS": //$NON-NLS-1$
173         return IBANVerifier.of(29, "^PS[0-9]{2}[0-9]{25}$"); //$NON-NLS-1$
174       case "PL": //$NON-NLS-1$
175         return IBANVerifier.of(28, "^PL[0-9]{2}[0-9]{7}[0-9A-Z][0-9]{16}$"); //$NON-NLS-1$
176       case "PT": //$NON-NLS-1$
177         return IBANVerifier.of(25, "^PT[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$
178       case "RO": //$NON-NLS-1$
179         return IBANVerifier.of(24, "^RO[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
180       case "SM": //$NON-NLS-1$
181         return IBANVerifier.of(27, "^SM[0-9]{2}[0-9A-Z][0-9]{22}$"); //$NON-NLS-1$
182       case "ST": //$NON-NLS-1$
183         return IBANVerifier.of(25, "^ST[0-9]{2}[0-9]{19}[0-9A-Z]{2}$"); //$NON-NLS-1$
184       case "SA": //$NON-NLS-1$
185         return IBANVerifier.of(24, "^SA[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
186       case "SE": //$NON-NLS-1$
187         return IBANVerifier.of(24, "^SE[0-9]{2}[0-9]{19}[0-9A-Z]$"); //$NON-NLS-1$
188       case "CH": //$NON-NLS-1$
189         return IBANVerifier.of(21, "^CH[0-9]{2}[0-9]{17}$"); //$NON-NLS-1$
190       case "SN": //$NON-NLS-1$
191         return IBANVerifier.of(28, "^SN[0-9]{2}[0-9]{22}[0-9A-Z]{2}$"); //$NON-NLS-1$
192       case "RS": //$NON-NLS-1$
193         return IBANVerifier.of(22, "^RS[0-9]{2}[0-9]{16}[0-9A-Z]{2}$"); //$NON-NLS-1$
194       case "SC": //$NON-NLS-1$
195         return IBANVerifier.of(31, "^SC[0-9]{2}[0-9]{24}XXX$"); //$NON-NLS-1$
196       case "SK": //$NON-NLS-1$
197         return IBANVerifier.of(24, "^SK[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
198       case "SI": //$NON-NLS-1$
199         return IBANVerifier.of(19, "^SI[0-9]{2}[0-9]{13}[0-9A-Z]{2}$"); //$NON-NLS-1$
200       case "ES": //$NON-NLS-1$
201         return IBANVerifier.of(24, "^ES[0-9]{2}[0-9]{8}[0-9A-Z]{2}[0-9]{10}$"); //$NON-NLS-1$
202       case "LC": //$NON-NLS-1$
203         return IBANVerifier.of(32, "^LC[0-9]{2}[0-9]{28}$"); //$NON-NLS-1$
204       case "CZ": //$NON-NLS-1$
205         return IBANVerifier.of(24, "^CZ[0-9]{2}[0-9]{20}$"); //$NON-NLS-1$
206       case "TN": //$NON-NLS-1$
207         return IBANVerifier.of(24, "^TN[0-9]{2}[0-9]{18}[0-9A-Z]{2}$"); //$NON-NLS-1$
208       case "TR": //$NON-NLS-1$
209         return IBANVerifier.of(26, "^TR[0-9]{2}[0-9]{22}$"); //$NON-NLS-1$
210       case "UA": //$NON-NLS-1$
211         return IBANVerifier.of(29, "^UA[0-9]{2}[0-9]{25}$"); //$NON-NLS-1$
212       case "HU": //$NON-NLS-1$
213         return IBANVerifier.of(28, "^HU[0-9]{2}[0-9]{7}[0-9A-Z][0-9]{15}[0-9A-Z]$"); //$NON-NLS-1$
214       case "VA": //$NON-NLS-1$
215         return IBANVerifier.of(26, "^VA[0-9]{2}[0-9]{22}$"); //$NON-NLS-1$
216       case "AE": //$NON-NLS-1$
217         return IBANVerifier.of(23, "^AE[0-9]{2}[0-9]{19}$"); //$NON-NLS-1$
218       case "GB": //$NON-NLS-1$
219         return IBANVerifier.of(22, "^GB[0-9]{2}[0-9]{18}$"); //$NON-NLS-1$
220       case "BY": //$NON-NLS-1$
221         return IBANVerifier.of(28, "^BY[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
222       case "CY": //$NON-NLS-1$
223         return IBANVerifier.of(28, "^CY[0-9]{2}[0-9]{24}$"); //$NON-NLS-1$
224       case "CF": //$NON-NLS-1$
225         return IBANVerifier.of(27, "^CF[0-9]{2}[0-9]{21}[0-9A-Z]{2}$"); //$NON-NLS-1$
226 
227       default:
228         return IBANVerifier.of(34, "^[A-Z]{2}[0-9]{2}[0-9]{11,30}$"); //$NON-NLS-1$
229      }
230    }
231 
232  }