1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jadira.cdt.country;
17
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import com.google.i18n.phonenumbers.PhoneNumberUtil;
22
23 import org.jadira.cdt.country.CountryCode;
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public enum ISOCountryCode implements CountryCode {
45
46 AF("Afghanistan", "AFG", 4),
47 AX("Aland Islands", "ALA", 248),
48 AL("Albania", "ALB", 8),
49 DZ("Algeria", "DZA", 12),
50 AS("American Samoa", "ASM", 16),
51 AD("Andorra", "AND", 20),
52 AO("Angola", "AGO", 24),
53 AI("Anguilla", "AIA", 660),
54 AQ("Antarctica", "ATA", 10),
55 AG("Antigua and Barbuda", "ATG", 28),
56 AR("Argentina", "ARG", 32),
57 AM("Armenia", "ARM", 51),
58 AW("Aruba", "ABW", 533),
59 AU("Australia", "AUS", 36),
60 AT("Austria", "AUT", 40),
61 AZ("Azerbaijan", "AZE", 31),
62 BS("Bahamas", "BHS", 44),
63 BH("Bahrain", "BHR", 48),
64 BD("Bangladesh", "BGD", 50),
65 BB("Barbados", "BRB", 52),
66 BY("Belarus", "BLR", 112),
67 BE("Belgium", "BEL", 56),
68 BZ("Belize", "BLZ", 84),
69 BJ("Benin", "BEN", 204),
70 BM("Bermuda", "BMU", 60),
71 BT("Bhutan", "BTN", 64),
72 BO("Plurinational State of Bolivia", "BOL", 68),
73 BQ("Bonaire, Sint Eustatius and Saba", "BES", 535),
74 BA("Bosnia and Herzegovina", "BIH", 70),
75 BW("Botswana", "BWA", 72),
76 BV("Bouvet Island", "BVT", 74),
77 BR("Brazil", "BRA", 76),
78 IO("British Indian Ocean Territory", "IOT", 86),
79 BN("Brunei Darussalam", "BRN", 96),
80 BG("Bulgaria", "BGR", 100),
81 BF("Burkina Faso", "BFA", 854),
82 BI("Burundi", "BDI", 108),
83 KH("Cambodia", "KHM", 116),
84 CM("Cameroon", "CMR", 120),
85 CA("Canada", "CAN", 124),
86 CV("Cape Verde", "CPV", 132),
87 KY("Cayman Islands", "CYM", 136),
88 CF("Central African Republic", "CAF", 140),
89 TD("Chad", "TCD", 148),
90 CL("Chile", "CHL", 152),
91 CN("China", "CHN", 156),
92 CX("Christmas Island", "CXR", 162),
93 CC("Cocos (Keeling) Islands", "CCK", 166),
94 CO("Colombia", "COL", 170),
95 KM("Comoros", "COM", 174),
96 CG("Congo", "COG", 178),
97 CD("The Democratic Republic of the Congo", "COD", 180),
98 CK("Cook Islands", "COK", 184),
99 CR("Costa Rica", "CRI", 188),
100 CI("Cote d'Ivoire", "CIV", 384),
101 HR("Croatia", "HRV", 191),
102 CU("Cuba", "CUB", 192),
103 CW("Curacao", "CUW", 531),
104 CY("Cyprus", "CYP", 196),
105 CZ("Czech Republic", "CZE", 203),
106 DK("Denmark", "DNK", 208),
107 DJ("Djibouti", "DJI", 262),
108 DM("Dominica", "DMA", 212),
109 DO("Dominican Republic", "DOM", 214),
110 EC("Ecuador", "ECU", 218),
111 EG("Egypt", "EGY", 818),
112 SV("El Salvador", "SLV", 222),
113 GQ("Equatorial Guinea", "GNQ", 226),
114 ER("Eritrea", "ERI", 232),
115 EE("Estonia", "EST", 233),
116 ET("Ethiopia", "ETH", 231),
117 FK("Falkland Islands (Malvinas)", "FLK", 238),
118 FO("Faroe Islands", "534", 703),
119 FJ("Fiji", "FJI", 242),
120 FI("Finland", "FIN", 246),
121 FR("France", "FRA", 250),
122 GF("French Guiana", "GUF", 254),
123 PF("French Polynesia", "PYF", 258),
124 TF("French Southern Territories", "ATF", 260),
125 GA("Gabon", "GAB", 266),
126 GM("Gambia", "GMB", 270),
127 GE("Georgia", "GEO", 268),
128 DE("Germany", "DEU", 276),
129 GH("Ghana", "GHA", 288),
130 GI("Gibraltar", "GIB", 292),
131 GR("Greece", "GRC", 300),
132 GL("Greenland", "GRL", 304),
133 GD("Grenada", "GRD", 308),
134 GP("Guadeloupe", "GLP", 312),
135 GU("Guam", "GUM", 316),
136 GT("Guatemala", "GTM", 320),
137 GG("Guernsey", "GGY", 831),
138 GN("Guinea", "GIN", 324),
139 GW("Guinea-Bissau", "GNB", 624),
140 GY("Guyana", "GUY", 328),
141 HT("Haiti", "HTI", 332),
142 HM("Heard Island and McDonald Islands", "HMD", 334),
143 VA("Holy See (Vatican City State)", "VAT", 336),
144 HN("Honduras", "HND", 340),
145 HK("Hong Kong", "HKG", 344),
146 HU("Hungary", "HUN", 348),
147 IS("Iceland", "ISL", 352),
148 IN("India", "IND", 356),
149 ID("Indonesia", "IDN", 360),
150 IR("Islamic Republic of Iran", "IRN", 364),
151 IQ("Iraq", "IRQ", 368),
152 IE("Ireland", "IRL", 372),
153 IM("Isle of Man", "IMN", 833),
154 IL("Israel", "ISR", 376),
155 IT("Italy", "ITA", 380),
156 JM("Jamaica", "JAM", 388),
157 JP("Japan", "JPN", 392),
158 JE("Jersey", "JEY", 832),
159 JO("Jordan", "JOR", 400),
160 KZ("Kazakhstan", "KAZ", 398),
161 KE("Kenya", "KEN", 404),
162 KI("Kiribati", "KIR", 296),
163 KP("Democratic People's Republic of Korea", "PRK", 408),
164 KR("Republic of Korea", "KOR", 410),
165 KW("Kuwait", "KWT", 414),
166 KG("Kyrgyzstan", "KGZ", 417),
167 LA("Lao People's Democratic Republic", "LAO", 418),
168 LV("Latvia", "LVA", 428),
169 LB("Lebanon", "LBN", 422),
170 LS("Lesotho", "LSO", 426),
171 LR("Liberia", "LBR", 430),
172 LY("Libyan Arab Jamahiriya", "LBY", 434),
173 LI("Liechtenstein", "LIE", 438),
174 LT("Lithuania", "LTU", 440),
175 LU("Luxembourg", "LUX", 442),
176 MO("Macao", "MAC", 446),
177 MK("The Former Yugoslav Republic of Macedonia", "MKD", 807),
178 MG("Madagascar", "MDG", 450),
179 MW("Malawi", "MWI", 454),
180 MY("Malaysia", "MYS", 458),
181 MV("Maldives", "MDV", 462),
182 ML("Mali", "MLI", 466),
183 MT("Malta", "MLT", 470),
184 MH("Marshall Islands", "MHL", 584),
185 MQ("Martinique", "MTQ", 474),
186 MR("Mauritania", "MRT", 478),
187 MU("Mauritius", "MUS", 480),
188 YT("Mayotte", "MYT", 175),
189 MX("Mexico", "MEX", 484),
190 FM("Federated States of Micronesia", "FSM", 583),
191 MD("Republic of Moldova", "MDA", 498),
192 MC("Monaco", "MCO", 492),
193 MN("Mongolia", "MNG", 496),
194 ME("Montenegro", "MNE", 499),
195 MS("Montserrat", "MSR", 500),
196 MA("Morocco", "MAR", 504),
197 MZ("Mozambique", "MOZ", 508),
198 MM("Myanmar", "MMR", 104),
199 NA("Namibia", "NAM", 516),
200 NR("Nauru", "NRU", 520),
201 NP("Nepal", "NPL", 524),
202 NL("Netherlands", "NLD", 528),
203 NC("New Caledonia", "NCL", 540),
204 NZ("New Zealand", "NZL", 554),
205 NI("Nicaragua", "NIC", 558),
206 NE("Niger", "NER", 562),
207 NG("Nigeria", "NGA", 566),
208 NU("Niue", "NIU", 570),
209 NF("Norfolk Island", "NFK", 574),
210 MP("Northern Mariana Islands", "MNP", 580),
211 NO("Norway", "NOR", 578),
212 PS("Occupied Palestinian Territory", "PSE", 275),
213 OM("Oman", "OMN", 512),
214 PK("Pakistan", "PAK", 586),
215 PW("Palau", "PLW", 585),
216 PA("Panama", "PAN", 591),
217 PG("Papua New Guinea", "PNG", 598),
218 PY("Paraguay", "PRY", 600),
219 PE("Peru", "PER", 604),
220 PH("Philippines", "PHL", 608),
221 PN("Pitcairn", "PCN", 612),
222 PL("Poland", "POL", 616),
223 PT("Portugal", "PRT", 620),
224 PR("Puerto Rico", "PRI", 630),
225 QA("Qatar", "QAT", 634),
226 RE("Reunion", "REU", 638),
227 RO("Romania", "ROU", 642),
228 RU("Russian Federation", "RUS", 643),
229 RW("Rwanda", "RWA", 646),
230 BL("Saint Barthelemy", "534", 703),
231 SH("Saint Helena, Ascension and Tristan da Cunha", "SHN", 654),
232 KN("Saint Kitts and Nevis", "KNA", 659),
233 LC("Saint Lucia", "LCA", 662),
234 MF("Saint Martin (French part)", "MAF", 663),
235 PM("Saint Pierre and Miquelon", "SPM", 666),
236 VC("Saint Vincent and The Grenadines", "VCT", 670),
237 WS("Samoa", "WSM", 882),
238 SM("San Marino", "SMR", 674),
239 ST("Sao Tome and Principe", "STP", 678),
240 SA("Saudi Arabia", "SAU", 682),
241 SN("Senegal", "SEN", 686),
242 RS("Serbia", "SRB", 688),
243 SC("Seychelles", "SYC", 690),
244 SL("Sierra Leone", "SLE", 694),
245 SG("Singapore", "SGP", 702),
246 SX("Sint Maarten (Dutch part)", "SXM", 534),
247 SK("Slovakia", "SVK", 703),
248 SI("Slovenia", "SVN", 705),
249 SB("Solomon Islands", "SLB", 90),
250 SO("Somalia", "SOM", 706),
251 ZA("South Africa", "ZAF", 710),
252 GS("South Georgia and the South Sandwich Islands", "SGS", 239),
253 SS("South Sudan", "SSD", 728),
254 ES("Spain", "ESP", 724),
255 LK("Sri Lanka", "LKA", 144),
256 SD("Sudan", "SDN", 729),
257 SR("Suriname", "SUR", 740),
258 SJ("Svalbard and Jan Mayen", "534", 703),
259 SZ("Swaziland", "SWZ", 748),
260 SE("Sweden", "SWE", 752),
261 CH("Switzerland", "CHE", 756),
262 SY("Syrian Arab Republic", "SYR", 760),
263 TW("Taiwan, Province of China", "TWN", 158),
264 TJ("Tajikistan", "TJK", 762),
265 TZ("United Republic of Tanzania", "TZA", 834),
266 TH("Thailand", "THA", 764),
267 TL("Timor-Leste", "TLS", 626),
268 TG("Togo", "TGO", 768),
269 TK("Tokelau", "TKL", 772),
270 TO("Tonga", "TON", 776),
271 TT("Trinidad and Tobago", "TTO", 780),
272 TN("Tunisia", "TUN", 788),
273 TR("Turkey", "TUR", 792),
274 TM("Turkmenistan", "TKM", 795),
275 TC("Turks and Caicos Islands", "TCA", 796),
276 TV("Tuvalu", "TUV", 798),
277 UG("Uganda", "UGA", 800),
278 UA("Ukraine", "UKR", 804),
279 AE("United Arab Emirates", "ARE", 784),
280 GB("United Kingdom", "GBR", 826),
281 US("United States", "USA", 840),
282 UM("United States Minor Outlying Islands", "UMI", 581),
283 UY("Uruguay", "URY", 858),
284 UZ("Uzbekistan", "UZB", 860),
285 VU("Vanuatu", "VUT", 548),
286 VE("Bolivarian Republic of Venezuela", "VEN", 862),
287 VN("Viet Nam", "VNM", 704),
288 VG("British Virgin Islands", "VGB", 92),
289 VI("U.S. Virgin Islands", "VIR", 850),
290 WF("Wallis and Futuna", "WLF", 876),
291 EH("Western Sahara", "ESH", 732),
292 YE("Yemen", "YEM", 887),
293 ZM("Zambia", "ZMB", 894),
294 ZW("Zimbabwe", "ZWE", 716),
295 ;
296
297 private static final Map<String, ISOCountryCode> alpha3CodeMap = new HashMap<String, ISOCountryCode>();
298 private static final Map<Integer, ISOCountryCode> numericCodeMap = new HashMap<Integer, ISOCountryCode>();
299
300 private static final PhoneNumberUtil PHONE_NUMBER_UTIL = PhoneNumberUtil.getInstance();
301
302 static {
303
304 for (ISOCountryCode next : values()) {
305 alpha3CodeMap.put(next.getAlpha3Code(), next);
306 numericCodeMap.put(next.getNumericCode(), next);
307 }
308 }
309
310 private final String countryName;
311 private final String alpha3Code;
312 private final Integer numericCode;
313
314 private ISOCountryCode(String countryName, String alpha3Code, Integer numericCode) {
315 this.countryName = countryName;
316 this.alpha3Code = alpha3Code;
317 this.numericCode = numericCode;
318 }
319
320
321
322
323
324 public String getCountryName() {
325 return countryName;
326 }
327
328
329
330
331
332 public String getAlpha2Code() {
333 return name();
334 }
335
336
337
338
339
340 public String getAlpha3Code() {
341 return alpha3Code;
342 }
343
344
345
346
347
348 public Integer getNumericCode() {
349 return numericCode;
350 }
351
352
353
354
355
356 public Integer getDiallingRegionCode() {
357 return PHONE_NUMBER_UTIL.getCountryCodeForRegion(this.getAlpha2Code());
358 }
359
360
361
362
363
364
365
366
367 public static ISOCountryCode getByCode(String code) {
368
369 if (code == null) {
370 return null;
371 }
372
373 if (code.length() == 2) {
374 return getByAlpha2Code(code);
375 } else if (code.length() == 3) {
376 return getByAlpha3Code(code);
377 } else {
378 return null;
379 }
380 }
381
382
383
384
385
386
387 public static ISOCountryCode getByAlpha2Code(String code) {
388 try {
389 return Enum.valueOf(ISOCountryCode.class, code);
390 } catch (IllegalArgumentException e) {
391 return null;
392 }
393 }
394
395
396
397
398
399
400 public static ISOCountryCode getByAlpha3Code(String code) {
401 return alpha3CodeMap.get(code);
402 }
403
404
405
406
407
408
409
410 public static ISOCountryCode getByNumericCode(Integer code) {
411 return numericCodeMap.get(code);
412 }
413
414
415
416
417
418
419 public static ISOCountryCode getByDiallingRegionCode(Integer code) {
420 return getByCode(PHONE_NUMBER_UTIL.getRegionCodeForCountryCode(code));
421 }
422 }