Skip to content

Instantly share code, notes, and snippets.

@budhash
Last active September 29, 2023 16:10
Show Gist options
  • Select an option

  • Save budhash/9c9ab486119de0796d2de33973b63da1 to your computer and use it in GitHub Desktop.

Select an option

Save budhash/9c9ab486119de0796d2de33973b63da1 to your computer and use it in GitHub Desktop.
countries csv file
ISO3 ISO2 ISONUM COUNTRY CAPITAL REGION SUB-REGION CONTINENT LATITUDE LONGITUDE BORDERS LANDLOCKED INDEPENDENT CURRENCYCODE CURRENCYNAME TLD CALLINGCODE EDGAR ITU MARC WMO DS FIFA FIPS IOC GAUL GEONAMEID LANGUAGES LANGUAGECODE NOTES
AND AD 20 ANDORRA Andorra la Vella Europe Southern Europe EU 42.546245 1.601554 FRA,ESP 1 Yes EUR Euro .ad 376 B6 AND an AND AND AN AND 7 3041565 Catalan ca-ES
ARE AE 784 UNITED ARAB EMIRATES Abu Dhabi Asia Western Asia AS 23.424076 53.847818 OMN,SAU Yes AED UAE Dirham .ae 971 C0 UAE ts ER UAE AE UAE 255 290557 Arabic ar-AE,fa,en,hi,ur
AFG AF 4 AFGHANISTAN Kabul Asia Southern Asia AS 33.93911 67.709953 IRN,PAK,TKM,UZB,TJK,CHN 1 Yes AFN Afghani .af 93 B2 AFG af AF AFG AFG AF AFG 1 1149361 Dari,Pashto,Turkmen fa-AF,ps,uz-AF,tk
ATG AG 28 ANTIGUA AND BARBUDA St. John's Americas Caribbean NA 17.060816 -61.796428 Yes XCD East Caribbean Dollar .ag 1268 B9 ATG aq AT ATG AC ANT 11 3576396 English en-AG
AIA AI 660 ANGUILLA The Valley Americas Caribbean NA 18.220554 -63.068615 Territory of GB XCD East Caribbean Dollar .ai 1264 1A AIA am AIA AV AIA 9 3573511 English en-AI
ALB AL 8 ALBANIA Tirana Europe Southern Europe EU 41.153332 20.168331 MNE,GRC,MKD,UNK Yes ALL Lek .al 355 B3 ALB aa AB AL ALB AL ALB 3 783754 Albanian sq,el
ARM AM 51 ARMENIA Yerevan Asia Western Asia AS 40.069099 45.038189 AZE,GEO,IRN,TUR 1 Yes AMD Armenian Dram .am 374 1B ARM ai AY AM ARM AM ARM 13 174982 Armenian,Russian hy
AGO AO 24 ANGOLA Luanda Africa Middle Africa AF -11.202692 17.873887 COG,COD,ZMB,NAM Yes AOA Kwanza .ao 244 B7 AGL ao AN ANG AO ANG 8 3351879 Portuguese pt-AO
ATA AQ 10 ANTARTICA Antartica Antartica AN -75.250973 -0.071389 International .aq 672 ay AA ROS AY 10 6697173
ARG AR 32 ARGENTINA Buenos Aires Americas South America SA -38.416097 -63.616672 BOL,BRA,CHL,PRY,URY Yes ARS Argentine Peso .ar 54 C1 ARG ag AG RA ARG AR ARG 12 3865483 Guaran�,Spanish es-AR,en,it,de,fr,gn
ASM AS 16 AMERICAN SAMOA Pago Pago Oceania Polynesia OC -14.270972 -170.132217 Territory of US USD US Dollar .as 1684 B5 SMA as USA ASA AQ ASA 5 5880801 English,Samoan en-AS,sm,to
AUT AT 40 AUSTRIA Vienna Europe Western Europe EU 47.516231 14.550072 CZE,DEU,HUN,ITA,LIE,SVK,SVN,CHE 1 Yes EUR Euro .at 43 C4 AUT au OS A AUT AU AUT 18 2782113 Austro-Bavarian German de-AT,hr,hu,sl
AUS AU 36 AUSTRALIA Canberra Oceania Australia and New Zealand OC -25.274398 133.775136 Yes AUD Australian Dollar .au 61 C3 AUS at AU AUS AUS AS AUS 17 2077456 English en-AU
ABW AW 533 ARUBA Oranjestad Americas Caribbean NA 12.52111 -69.968338 Part of NL AWG Aruban Florin .aw 297 1C ABW aw NU ARU AA ARU 14 3577279 Dutch,Papiamento nl-AW,es,en
ALA AX 248 ALAND ISLANDS Mariehamn Europe Northern Europe EU 60.116667 19.9 Part of FI EUR Euro .ax 358 FIN ALD 1242 661882 Swedish sv-AX
AZE AZ 31 AZERBAIJAN Baku Asia Western Asia AS 40.143105 47.576927 ARM,GEO,IRN,RUS,TUR 1 Yes AZN Azerbaijanian Manat .az 994 1D AZE aj AJ AZ AZE AJ AZE 19 587116 Azerbaijani,Russian az,ru,hy
BIH BA 70 BOSNIA AND HERZEGOVINA Sarajevo Europe Southern Europe EU 43.915886 17.679076 HRV,MNE,SRB Yes BAM Convertible Mark .ba 387 1E BIH bn BG BIH BIH BK BIH 34 3277605 Bosnian,Croatian,Serbian bs,hr-BA,sr-BA
BRB BB 52 BARBADOS Bridgetown Americas Caribbean NA 13.193887 -59.543198 Yes BBD Barbados Dollar .bb 1246 C8 BRB bb BR BDS BRB BB BAR 24 3374084 English en-BB
BGD BD 50 BANGLADESH Dhaka Asia Southern Asia AS 23.684994 90.356331 MMR,IND Yes BDT Taka .bd 880 C7 BGD bg BW BD BAN BG BAN 23 1210997 Bengali bn-BD,en
BEL BE 56 BELGIUM Brussels Europe Western Europe EU 50.503887 4.469936 FRA,DEU,LUX,NLD Yes EUR Euro .be 32 C9 BEL be BX B BEL BE BEL 27 2802361 German,French,Dutch nl-BE,fr-BE,de-BE
BFA BF 854 BURKINA FASO Ouagadougou Africa Western Africa AF 12.238333 -1.561593 BEN,CIV,GHA,MLI,NER,TGO 1 Yes XOF CFA Franc BCEAO .bf 226 X2 BFA uv HV BF BFA UV BUR 42 2361809 French fr-BF
BGR BG 100 BULGARIA Sofia Europe Eastern Europe EU 42.733883 25.48583 GRC,MKD,ROU,SRB,TUR Yes BGN Bulgarian Lev .bg 359 E0 BUL bu BU BG BUL BU BUL 41 732800 Bulgarian bg,tr-BG,rom
BHR BH 48 BAHRAIN Manama Asia Western Asia AS 25.930414 50.637772 Yes BHD Bahraini Dinar .bh 973 C6 BHR ba BN BRN BHR BA BRN 21 290291 Arabic ar-BH,en,fa,ur
BDI BI 108 BURUNDI Bujumbura Africa Eastern Africa AF -3.373056 29.918886 COD,RWA,TZA 1 Yes BIF Burundi Franc .bi 257 E2 BDI bd BI RU BDI BY BDI 43 433561 French,Kirundi fr-BI,rn
BEN BJ 204 BENIN Porto-Novo Africa Western Africa AF 9.30769 2.315834 BFA,NER,NGA,TGO Yes XOF CFA Franc BCEAO .bj 229 G6 BEN dm BJ DY BEN BN BEN 29 2395170 French fr-BJ
BLM BL 652 SAINT BARTHELEMY Gustavia Americas Caribbean NA 18.5 -63.41666666 Part of FR EUR Euro .bl 590 sc TB 3578476 French fr
BMU BM 60 BERMUDA Hamilton Americas Northern America NA 32.321384 -64.75737 Territory of GB BMD Bermudian Dollar .bm 1441 D0 BER bm BE BER BD BER 30 3573345 English en-BM,pt
BRN BN 96 BRUNEI DARUSSALAM Bandar Seri Begawan Asia South-Eastern Asia AS 4.535277 114.727669 MYS Yes BND Brunei Dollar .bn 673 D9 BRU bx BD BRU BRU BX BRU 40 1820814 Malay ms-BN,en-BN
BOL BO 68 BOLIVIA Sucre Americas South America SA -16.290154 -63.588653 ARG,BRA,CHL,PRY,PER 1 Yes BOB Boliviano .bo 591 BOL bo BO BOL BOL BL BOL 33 3923057 Aymara,Guaran�,Quechua,Spanish es-BO,qu,ay
BES BQ 535 BONAIRE, SINT EUSTATIUS AND SABA Americas Caribbean NA 12.1833 -68.233 Part of NL USD US Dollar .bq 599 ATN ca NU ANT NL AHO 176 7626844 nl,pap,en three special municipalities of the Netherlands that are located in the Caribbean Sea
BRA BR 76 BRAZIL Brasilia Americas South America SA -14.235004 -51.92528 ARG,BOL,COL,GUF,GUY,PRY,PER,SUR,URY,VEN Yes BRL Brazilian Real .br 55 D5 B bl BZ BR BRA BR BRA 37 3469034 Portuguese pt-BR,es,en,fr
BHS BS 44 BAHAMAS Nassau Americas Caribbean NA 25.03428 -77.39628 Yes BSD Bahamian Dollar .bs 1242 C5 BAH bf BA BS BAH BF BAH 20 3572887 English en-BS
BTN BT 64 BHUTAN Thimphu Asia Southern Asia AS 27.514162 90.433601 CHN,IND 1 Yes BTN Indian Rupee .bt 975 D2 BTN bt BHU BT BHU 31 1252634 Dzongkha dz
BVT BV 74 BOUVET ISLAND Antartica Antartica AN -54.423199 3.413194 Territory of NO NOK Norwegian Krone .bv 47 bv BV BV 36 3371123 Norwegian
BWA BW 72 BOTSWANA Gaborone Africa Southern Africa AF -22.328474 24.684866 NAM,ZAF,ZMB,ZWE 1 Yes BWP Pula .bw 267 B1 BOT bs BC BW BOT BC BOT 35 933860 English,Tswana en-BW,tn-BW
BLR BY 112 BELARUS Minsk Europe Eastern Europe EU 53.709807 27.953389 LVA,LTU,POL,RUS,UKR 1 Yes BYR Belarussian Ruble .by 375 1F BLR bw BY BY BLR BO BLR 26 630336 Belarusian,Russian be,ru
BLZ BZ 84 BELIZE Belmopan Americas Central America NA 17.189877 -88.49765 GTM,MEX Yes BZD Belize Dollar .bz 501 D1 BLZ bh BH BZ BLZ BH BIZ 28 3582678 Belizean Creole,English,Spanish en-BZ,es
CAN CA 124 CANADA Ottawa Americas Northern America NA 56.130366 -106.346771 USA Yes CAD Canadian Dollar .ca 1 CAN xxc CN CDN CAN CA CAN 46 6251999 English,French en-CA,fr-CA,iu
CCK CC 166 COCOS [KEELING] ISLANDS West Island Oceania Australia and New Zealand AS -12.164165 96.870956 Territory of AU AUD Australian Dollar .cc 61 ICO xb KK AUS CCK CK 56 1547376 English ms-CC,en
COD CD 180 CONGO [DRC] Kinshasa Africa Middle Africa AF -4.038333 21.758664 AGO,BDI,CAF,COG,RWA,SSD,TZA,UGA,ZMB Yes CDF Congolese Franc .cd 243 COD cg ZR ZRE COD CG COD 68 203312 French,Kikongo,Lingala,Tshiluba,Swahili fr-CD,ln,kg
CAF CF 140 CENTRAL AFRICAN REPUBLIC Bangui Africa Middle Africa AF 6.611111 20.939444 CMR,TCD,COD,COG,SSD,SDN 1 Yes XAF CFA Franc BEAC .cf 236 F0 CAF cx CE RCA CTA CT CAF 49 239880 French,Sango fr-CF,sg,ln,kg
COG CG 178 CONGO Brazzaville Africa Middle Africa AF -0.228021 15.827659 AGO,CMR,CAF,COD,GAB Yes XAF CFA Franc BEAC .cg 242 G0 COG cf CG RCB CGO CF CGO 59 2260494 French,Kikongo,Lingala fr-CG,kg,ln-CG
CHE CH 756 SWITZERLAND Bern Europe Western Europe EU 46.818188 8.227512 AUT,FRA,ITA,LIE,DEU 1 Yes CHF Swiss Franc .ch 41 V8 SUI sz SW CH SUI SZ SUI 237 2658434 French,Swiss German,Italian,Romansh de-CH,fr-CH,it-CH,rm
CIV CI 384 COTE D'IVOIRE Yamoussoukro Africa Western Africa AF 7.539989 -5.54708 BFA,GHA,GIN,LBR,MLI Yes XOF CFA Franc BCEAO .ci 225 CTI iv IV CI CIV IV CIV 66 2287781 French fr-CI
COK CK 184 COOK ISLANDS Avarua Oceania Polynesia OC -21.236736 -159.777671 Associated with NZ NZD New Zealand Dollar .ck 682 G1 CKH cw KU NZ COK CW COK 60 1899402 English,Cook Islands M_ori en-CK,mi
CHL CL 152 CHILE Santiago Americas South America SA -35.675147 -71.542969 ARG,BOL,PER Yes CLP Chilean Peso .cl 56 F3 CHL cl CH RCH CHI CI CHI 51 3895114 Spanish es-CL
CMR CM 120 CAMEROON Yaounde Africa Middle Africa AF 7.369722 12.354722 CAF,TCD,COG,GNQ,GAB,NGA Yes XAF CFA Franc BEAC .cm 237 E4 CME cm CM CAM CMR CM CMR 45 2233387 English,French en-CM,fr-CM
CHN CN 156 CHINA Beijing Asia Eastern Asia AS 35.86166 104.195397 AFG,BTN,MMR,HKG,IND,KAZ,PRK,KGZ,LAO,MAC,MNG,PAK,RUS,TJK,VNM Yes CNY Yuan Renminbi .cn 86 F4 CHN cc CI CHN CH CHN 53 1814991 Mandarin zh-CN,yue,wuu,dta,ug,za
COL CO 170 COLOMBIA Bogota Americas South America SA 4.570868 -74.297333 BRA,ECU,PAN,PER,VEN Yes COP Colombian Peso .co 57 F8 CLM ck CO CO COL CO COL 57 3686110 Spanish es-CO
CRI CR 188 COSTA RICA San Jose Americas Central America NA 9.748917 -83.753428 NIC,PAN Yes CRC Costa Rican Colon .cr 506 G2 CTR cr CS CR CRC CS CRC 61 3624060 Spanish es-CR,en
CUB CU 192 CUBA Havana Americas Caribbean NA 21.521757 -77.781167 Yes CUP Cuban Peso .cu 53 G3 CUB cu CU C CUB CU CUB 63 3562981 Spanish es-CU
CPV CV 132 CABO VERDE Praia Africa Western Africa AF 16.002082 -24.013197 Yes CVE Cabo Verde Escudo .cv 238 CPV cv CV CPV CV CPV 47 3374766 Portuguese pt-CV
CUW CW 531 CURACAO Willemstad Americas Caribbean NA 12.116667 -68.933333 Part of NL ANG Netherlands Antillean Guilder .cw 5999 co UC 7626836 English,Dutch,Papiamento nl,pap
CXR CX 162 CHRISTMAS ISLAND Flying Fish Cove Oceania Australia and New Zealand AS -10.447525 105.690449 Territory of AU AUD Australian Dollar .cx 61 CHR xa KI AUS CXR KT 54 2078138 English en,zh,ms-CC
CYP CY 196 CYPRUS Nicosia Europe Eastern Europe EU 35.126413 33.429859 GBR Yes EUR Euro .cy 357 G4 CYP cy CY CY CYP CY CYP 64 146669 Greek,Turkish el-CY,tr-CY,en
CZE CZ 203 CZECH REPUBLIC Prague Europe Eastern Europe EU 49.817492 15.472962 AUT,DEU,POL,SVK 1 Yes CZK Czech Koruna .cz 420 2N CZE xr CZ CZ CZE EZ CZE 65 3077311 Czech,Slovak cs,sk
DEU DE 276 GERMANY Berlin Europe Western Europe EU 51.165691 10.451526 AUT,BEL,CZE,DNK,FRA,LUX,NLD,POL,CHE Yes EUR Euro .de 49 2M D gw DL D GER GM GER 93 2921044 German de
DJI DJ 262 DJIBOUTI Djibouti Africa Eastern Africa AF 11.825138 42.590275 ERI,ETH,SOM Yes DJF Djibouti Franc .dj 253 1G DJI ft DJ DJI DJ DJI 70 223816 Arabic,French fr-DJ,ar,so-DJ,aa
DNK DK 208 DENMARK Copenhagen Europe Northern Europe EU 56.26392 9.501785 DEU Yes DKK Danish Krone .dk 45 G7 DNK dk DN DK DEN DA DEN 69 2623032 Danish da-DK,en,fo,de-DK
DMA DM 212 DOMINICA Roseau Americas Caribbean NA 15.414999 -61.370976 Yes XCD East Caribbean Dollar .dm 1767 G9 DMA dq DO WD DMA DO DMA 71 3575830 English en-DM
DOM DO 214 DOMINICAN REPUBLIC Santo Domingo Americas Caribbean NA 18.735693 -70.162651 HTI Yes DOP Dominican Peso .do 1809, 1829, 1849 G8 DOM dr DR DOM DOM DR DOM 72 3508796 Spanish es-DO
DZA DZ 12 ALGERIA Algiers Africa Northern Africa AF 28.033886 1.659626 TUN,LBY,NER,ESH,MRT,MLI,MAR Yes DZD Algerian Dinar .dz 213 B4 ALG ae AL DZ ALG AG ALG 4 2589581 Arabic ar-DZ
ECU EC 218 ECUADOR Quito Americas South America SA -1.831239 -78.183406 COL,PER Yes USD US Dollar .ec 593 H1 EQA ec EQ EC ECU EC ECU 73 3658394 Spanish es-EC
EST EE 233 ESTONIA Tallinn Europe Northern Europe EU 58.595272 25.013607 LVA,RUS Yes EUR Euro .ee 372 1H EST er EO EST EST EN EST 78 453733 Estonian et,ru
EGY EG 818 EGYPT Cairo Africa Northern Africa AF 26.820553 30.802498 ISR,LBY,SDN Yes EGP Egyptian Pound .eg 20 H2 EGY ua EG ET EGY EG EGY 40765 357994 Arabic ar-EG,en,fr
ESH EH 732 WESTERN SAHARA El-Aaiun Africa Northern Africa AF 24.215527 -12.885834 DZA,MRT,MAR In contention MAD Moroccan Dirham .eh 212 U5 AOE ss SAH WI 268 2461445 Berber,Hassaniya,Spanish ar,mey
ERI ER 232 ERITREA Asmara Africa Eastern Africa AF 15.179384 39.782334 DJI,ETH,SDN Yes ERN Nakfa .er 291 1J ERI ea ERI ER ERI 77 338010 Arabic,English,Tigrinya aa-ER,ar,tig,kun,ti-ER
ESP ES 724 SPAIN Madrid Europe Southern Europe EU 40.463667 -3.74922 AND,FRA,GIB,PRT,MAR Yes EUR Euro .es 34 U3 E sp SP E ESP SP ESP 229 2510769 Catalan,Basque,Galician,Occitan,Spanish es-ES,ca,gl,eu,oc
ETH ET 231 ETHIOPIA Addis Ababa Africa Eastern Africa AF 9.145 40.489673 DJI,ERI,KEN,SOM,SSD,SDN 1 Yes ETB Ethiopian Birr .et 251 H5 ETH et ET ETH ETH ET ETH 79 337996 Amharic am,en-ET,om-ET,ti-ET,so-ET,sid
FIN FI 246 FINLAND Helsinki Europe Northern Europe EU 61.92411 25.748151 NOR,SWE,RUS Yes EUR Euro .fi 358 H9 FIN fi FI FIN FIN FI FIN 84 660013 Finnish,Swedish fi-FI,sv-FI,smn
FJI FJ 242 FIJI Suva Oceania Melanesia OC -16.578193 179.414413 Yes FJD Fiji Dollar .fj 679 H8 FJI fj FJ FJI FIJ FJ FIJ 83 2205218 English,Fijian,Fiji Hindi en-FJ,fj
FLK FK 238 FALKLAND ISLANDS (MALVINAS) Stanley Americas South America SA -51.796253 -59.523613 Territory of GB FKP Falkland Islands Pound .fk 500 H7 FLK fk FK FLK FK FLK 81 3474414 English en-FK
FSM FM 583 MICRONESIA, FEDERATED STATES OF Palikir Oceania Micronesia OC 7.425554 150.550812 Yes USD US Dollar .fm 691 FSM fm FSM FM FSM 163 2081918 English en-FM,chk,pon,yap,kos,uli,woe,nkr,kpg
FRO FO 234 FAROE ISLANDS Torshavn Europe Northern Europe EU 61.892635 -6.911806 Part of DK DKK Danish Krone .fo 298 FRO fa FA FO FRO FO FAR 82 2622320 Danish,Faroese fo,da-FO
FRA FR 250 FRANCE Paris Europe Western Europe EU 46.227638 2.213749 AND,BEL,DEU,ITA,LUX,MCO,ESP,CHE Yes EUR Euro .fr 33 I0 F fr FR F FRA FR FRA 85 3017382 French fr-FR,frp,br,co,ca,eu,oc
GAB GA 266 GABON Libreville Africa Middle Africa AF -0.803689 11.609444 CMR,COG,GNQ Yes XAF CFA Franc BEAC .ga 241 I5 GAB go GO G GAB GB GAB 89 2400553 French fr-GA
GBR GB 826 UNITED KINGDOM London Europe Northern Europe EU 55.378051 -3.435973 IRL Yes GBP Pound Sterling .uk 44 G xxk UK GB ENG,NIR,SCO,WAL UK GBR 256 2635167 English en-GB,cy-GB,gd
GRD GD 308 GRENADA St. George's Americas Caribbean NA 12.262776 -61.604171 Yes XCD East Caribbean Dollar .gd 1473 J5 GRD gd GD WG GRN GJ GRN 99 3580239 English en-GD
GEO GE 268 GEORGIA Tbilisi Asia Western Asia AS 42.315407 43.356892 ARM,AZE,RUS,TUR Yes GEL Lari .ge 995 2Q GEO gs GG GE GEO GG GEO 92 614540 Georgian ka,ru,hy,az
GUF GF 254 FRENCH GUIANA Cayenne Americas South America SA 3.933889 -53.125782 BRA,SUR Part of FR EUR Euro .gf 594 I3 GUF fg FG F GUF FG FGU 86 3381670 French fr-GF
GGY GG 831 GUERNSEY St. Peter Port Europe Northern Europe EU 49.465691 -2.585278 Crown dependency of GB GBP Pound Sterling .gg 44 Y7 uik GBG GBG GK 104 3042362 English,French,Guern_siais en,fr
GHA GH 288 GHANA Accra Africa Western Africa AF 7.946527 -1.023194 BFA,CIV,TGO Yes GHS Ghana Cedi .gh 233 J0 GHA gh GH GH GHA GH GHA 94 2300660 English en-GH,ak,ee,tw
GIB GI 292 GIBRALTAR Gibraltar Europe Southern Europe EU 36.137741 -5.345374 ESP Territory of GB GIP Gibraltar Pound .gi 350 J1 GIB gi GI GBZ GBZ GI GIB 95 2411586 English en-GI,es,it,pt
GRL GL 304 GREENLAND Nuuk Americas Northern America NA 71.706936 -42.604303 Part of DK DKK Danish Krone .gl 299 J4 GRL gl GL DK GRL GL GRL 98 3425505 Greenlandic kl,da-GL,en
GMB GM 270 GAMBIA Banjul Africa Western Africa AF 13.443182 -15.310139 SEN Yes GMD Dalasi .gm 220 I6 GMB gm GB WAG GAM GA GAM 90 2413451 English en-GM,mnk,wof,wo,ff
GIN GN 324 GUINEA Conakry Africa Western Africa AF 9.945587 -9.696645 CIV,GNB,LBR,MLI,SEN,SLE Yes GNF Guinea Franc .gn 224 J9 GUI gv GN RG GUI GV GUI 106 2420477 French fr-GN
GLP GP 312 GUADELOUPE Basse-Terre Americas Caribbean NA 16.995971 -62.067641 Part of FR EUR Euro .gp 590 J6 GDL gp MF F GLP GP GUD 100 3579143 French fr-GP
GNQ GQ 226 EQUATORIAL GUINEA Malabo Africa Middle Africa AF 1.650801 10.267895 CMR,GAB Yes XAF CFA Franc BEAC .gq 240 H4 GNE eg GQ EQG EK GEQ 76 2309096 French,Portuguese,Spanish es-GQ,fr
GRC GR 300 GREECE Athens Europe Southern Europe EU 39.074208 21.824312 ALB,BGR,TUR,MKD Yes EUR Euro .gr 30 J3 GRC gr GR GR GRE GR GRE 97 390903 Greek el-GR,en,fr
SGS GS 239 SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS King Edward Point Americas South America AN -54.429579 -36.587909 Territory of GB GBP Pound Sterling .gs 500 xs SX 228 3474415 English en
GTM GT 320 GUATEMALA Guatemala City Americas Central America NA 15.783471 -90.230759 BLZ,SLV,HND,MEX Yes GTQ Quetzal .gt 502 J8 GTM gt GU GCA GUA GT GUA 103 3595528 Spanish es-GT
GUM GU 316 GUAM Hagatna Oceania Micronesia OC 13.444304 144.793731 Territory of US USD US Dollar .gu 1671 GU GUM gu GM USA GUM GQ GUM 101 4043988 Chamorro,English,Spanish en-GU,ch-GU
GNB GW 624 GUINEA-BISSAU Bissau Africa Western Africa AF 11.803749 -15.180413 GIN,SEN Yes XOF CFA Franc BCEAO .gw 245 S0 GNB pg GW GNB PU GBS 105 2372248 Portuguese pt-GW,pov
GUY GY 328 GUYANA Georgetown Americas South America SA 4.860416 -58.93018 BRA,SUR,VEN Yes GYD Guyana Dollar .gy 592 K0 GUY gy GY GUY GUY GY GUY 107 3378535 English en-GY
HKG HK 344 HONG KONG City of Victoria Asia Eastern Asia AS 22.396428 114.109497 CHN Part of CN HKD Hong Kong Dollar .hk 852 HKG HK HK HKG HK HKG 33364 1819730 English,Chinese zh-HK,yue,zh,en No official capital
HMD HM 334 HEARD ISLAND AND MCDONALD ISLANDS Oceania Australia and New Zealand AN -53.08181 73.504158 Territory of AU AUD Australian Dollar .hm 672 hm AUS HM 109 1547314 English
HND HN 340 HONDURAS Tegucigalpa Americas Central America NA 15.199999 -86.241905 GTM,SLV,NIC Yes HNL Lempira .hn 504 K2 HND ho HO HON HO HON 111 3608932 Spanish es-HN
HRV HR 191 CROATIA Zagreb Europe Southern Europe EU 45.16666666 15.2 BIH,HUN,MNE,SRB,SVN Yes HRK Croatian Kuna .hr 385 1M HRV ci RH HR CRO HR CRO 62 3202326 Croatian hr-HR,sr
HTI HT 332 HAITI Port-au-Prince Americas Caribbean NA 18.971187 -72.285215 DOM Yes HTG Haitian Gourde .ht 509 K1 HTI ht HA RH HAI HA HAI 108 3723988 French,Haitian Creole ht,fr-HT
HUN HU 348 HUNGARY Budapest Europe Eastern Europe EU 47.162494 19.503304 AUT,HRV,ROU,SRB,SVK,SVN,UKR 1 Yes HUF Forint .hu 36 K5 HNG hu HU H HUN HU HUN 113 719819 Hungarian hu-HU
IDN ID 360 INDONESIA Jakarta Asia South-Eastern Asia AS -0.789275 113.921327 TLS,MYS,PNG Yes IDR Rupiah .id 62 K8 INS io ID RI IDN ID INA 116 1643084 Indonesian id,en,nl,jv
IRL IE 372 IRELAND Dublin Europe Northern Europe EU 53.41291 -8.24389 GBR Yes EUR Euro .ie 353 L2 IRL ie IE IRL IRL EI IRL 119 2963597 English,Irish en-IE,ga-IE
ISR IL 376 ISRAEL Jerusalem Asia Western Asia AS 31.046051 34.851612 EGY,JOR,LBN,SYR Yes ILS Israeli New Shekel .il 972 L3 ISR is IS IL ISR IS ISR 121 294640 Arabic,Hebrew he,ar-IL,en-IL,
IMN IM 833 ISLE OF MAN Douglas Europe Northern Europe EU 54.236107 -4.548056 Crown dependency of GB GBP Pound Sterling .im 44 Y8 uik GBM GBM IM 120 3042225 English,Manx en,gv
IND IN 356 INDIA New Delhi Asia Southern Asia AS 20.593684 78.96288 AFG,BGD,BTN,MMR,CHN,NPL,PAK,LKA Yes INR Indian Rupee .in 91 K7 IND ii IN IND IND IN IND 115 1269750 English,Hindi,Tamil en-IN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc
IOT IO 86 BRITISH INDIAN OCEAN TERRITORY Diego Garcia Africa Eastern Africa AS -6.343194 71.876519 Territory of GB GBP Pound Sterling .io 246 BIO bi IO 38 1282588 English en-IO
IRQ IQ 368 IRAQ Baghdad Asia Western Asia AS 33.223191 43.679291 IRN,JOR,KWT,SAU,SYR,TUR Yes IQD Iraqi Dinar .iq 964 L0 IRQ iq IQ IRQ IRQ IZ IRQ 118 99237 Arabic,Aramaic,Sorani ar-IQ,ku,hy
IRN IR 364 IRAN Tehran Asia Southern Asia AS 32.427908 53.688046 AFG,ARM,AZE,IRQ,PAK,TUR,TKM Yes IRR Iranian Rial .ir 98 IRN ir IR IR IRN IR IRI 117 130758 Persian fa-IR,ku
ISL IS 352 ICELAND Reykjavik Europe Northern Europe EU 64.963051 -19.020835 Yes ISK Iceland Krona .is 354 K6 ISL ic IL IS ISL IC ISL 114 2629691 Icelandic is,en,de,da,sv,no
ITA IT 380 ITALY Rome Europe Southern Europe EU 41.87194 12.56738 AUT,FRA,SMR,SVN,CHE,VAT Yes EUR Euro .it 39 L6 I it IY I ITA IT ITA 122 3175395 Austro-Bavarian German,Italian,Sardinian it-IT,de-IT,fr-IT,sc,ca,co,sl
JEY JE 832 JERSEY Saint Helier Europe Northern Europe EU 49.214439 -2.13125 Crown dependency of GB GBP Pound Sterling .je 44 Y9 uik GBJ GBJ JE 128 3042142 English,French,J�rriais en,pt
JAM JM 388 JAMAICA Kingston Americas Caribbean NA 18.109581 -77.297508 Yes JMD Jamaican Dollar .jm 1876 L8 JMC jm JM JA JAM JM JAM 123 3489940 English,Jamaican Patois en-JM
JOR JO 400 JORDAN Amman Asia Western Asia AS 30.585164 36.238414 IRQ,ISR,SAU,SYR Yes JOD Jordanian Dinar .jo 962 M2 JOR jo JD HKJ JOR JO JOR 130 248816 Arabic ar-JO,en
JPN JP 392 JAPAN Tokyo Asia Eastern Asia AS 36.204824 138.252924 Yes JPY Yen .jp 81 M0 J ja JP J JPN JA JPN 126 1861060 Japanese ja
KEN KE 404 KENYA Nairobi Africa Eastern Africa AF -0.023559 37.906193 ETH,SOM,SSD,TZA,UGA Yes KES Kenyan Shilling .ke 254 M3 KEN ke KN EAK KEN KE KEN 133 192950 English,Swahili en-KE,sw-KE
KGZ KG 417 KYRGYZSTAN Bishkek Asia Central Asia AS 41.20438 74.766098 CHN,KAZ,TJK,UZB 1 Yes KGS Som .kg 996 1N KGZ kg KG KS KGZ KG KGZ 138 1527747 Kyrgyz,Russian ky,uz,ru
KHM KH 116 CAMBODIA Phnom Penh Asia South-Eastern Asia AS 12.565679 104.990963 LAO,THA,VNM Yes KHR Riel .kh 855 E3 CBG cb KP K CAM CB CAM 44 1831722 Khmer km,fr,en
KIR KI 296 KIRIBATI Tarawa Oceania Micronesia OC -3.370417 -168.734039 Yes AUD Australian Dollar .ki 686 J2 KIR gb KB KIR KR KIR 135 4030945 English,Gilbertese en-KI,gil
COM KM 174 COMOROS Moroni Africa Eastern Africa AF -11.875001 43.872219 Yes KMF Comoro Franc .km 269 F9 COM cq IC COM CN COM 58 921929 Arabic,French,Comorian ar,fr-KM
KNA KN 659 SAINT KITTS AND NEVIS Basseterre Americas Caribbean NA 17.357822 -62.782998 Yes XCD East Caribbean Dollar .kn 1869 U7 KNA xd AT SKN SC SKN 208 3575174 English en-KN
PRK KP 408 NORTH KOREA Pyongyang Asia Eastern Asia AS 40.339852 127.510093 CHN,KOR,RUS Yes KPW North Korean Won .kp 850 KRE kn KR PRK KN PRK 67 1873107 Korean ko-KP
KOR KR 410 SOUTH KOREA Seoul Asia Eastern Asia AS 35.907757 127.766922 PRK Yes KRW South Korean Won .kr 82 KOR ko KO ROK KOR KS KOR 202 1835841 Korean ko-KR,en
KWT KW 414 KUWAIT Kuwait City Asia Western Asia AS 29.31166 47.481766 IRQ,SAU Yes KWD Kuwaiti Dinar .kw 965 M6 KWT ku KW KWT KUW KU KUW 137 285570 Arabic ar-KW,en
CYM KY 136 CAYMAN ISLANDS George Town Americas Caribbean NA 19.513469 -80.566956 Territory of GB KYD Cayman Islands Dollar .ky 1345 E9 CYM cj GC CAY CJ CAY 48 3580718 English en-KY
KAZ KZ 398 KAZAKHSTAN Astana Asia Central Asia AS 48.019573 66.923684 CHN,KGZ,RUS,TKM,UZB 1 Yes KZT Tenge .kz 76, 77 KAZ kz KZ KZ KAZ KZ KAZ 132 1522867 Kazakh,Russian kk,ru
LAO LA 418 LAO PEOPLE�S DEMOCRATIC REPUBLIC Vientiane Asia South-Eastern Asia AS 19.85627 102.495496 MMR,KHM,CHN,THA,VNM 1 Yes LAK Kip .la 856 LAO ls LA LAO LAO LA LAO 139 1655842 Lao lo,fr,en
LBN LB 422 LEBANON Beirut Asia Western Asia AS 33.854721 35.862285 ISR,SYR Yes LBP Lebanese Pound .lb 961 M8 LBN le LB RL LIB LE LIB 141 272103 Arabic,French ar-LB,fr-LB,en,hy
LCA LC 662 SAINT LUCIA Castries Americas Caribbean NA 13.909444 -60.978893 Yes XCD East Caribbean Dollar .lc 1758 U9 LCA xk LC WL LCA ST LCA 209 3576468 English en-LC
LIE LI 438 LIECHTENSTEIN Vaduz Europe Western Europe EU 47.166 9.555373 AUT,CHE 1 Yes CHF Swiss Franc .li 423 N2 LIE lh FL LIE LS LIE 146 3042058 German de-LI
LKA LK 144 SRI LANKA Colombo Asia Southern Asia AS 7.873054 80.771797 IND Yes LKR Sri Lanka Rupee .lk 94 F1 CLN ce SB CL SRI CE SRI 231 1227603 Sinhala,Tamil si,ta,en
LBR LR 430 LIBERIA Monrovia Africa Western Africa AF 6.428055 -9.429499 GIN,CIV,SLE Yes LRD Liberian Dollar .lr 231 N0 LBR lb LI LB LBR LI LBR 144 2275384 English en-LR
LSO LS 426 LESOTHO Maseru Africa Southern Africa AF -29.609988 28.233608 ZAF 1 Yes ZAR South African Rand .ls 266 M9 LSO lo LS LS LES LT LES 142 932692 English,Sotho en-LS,st,zu,xh
LTU LT 440 LITHUANIA Vilnius Europe Northern Europe EU 55.169438 23.881275 BLR,LVA,POL,RUS Yes EUR Euro .lt 370 1Q LTU li LT LT LTU LH LTU 147 597427 Lithuanian lt,ru,pl
LUX LU 442 LUXEMBOURG Luxembourg Europe Western Europe EU 49.815273 6.129583 BEL,FRA,DEU 1 Yes EUR Euro .lu 352 N4 LUX lu BX L LUX LU LUX 148 2960313 German,French,Luxembourgish lb,de-LU,fr-LU
LVA LV 428 LATVIA Riga Europe Northern Europe EU 56.879635 24.603189 BLR,EST,LTU,RUS Yes EUR Euro .lv 371 1R LVA lv LV LV LVA LG LAT 140 458258 Latvian lv,ru,lt
LBY LY 434 LIBYA Tripoli Africa Northern Africa AF 26.3351 17.228331 DZA,TCD,EGY,NER,SDN,TUN Yes LYD Libyan Dinar .ly 218 LBY ly LY LAR LBY LY LBA 145 2215636 Arabic ar-LY,it,en
MAR MA 504 MOROCCO Rabat Africa Northern Africa AF 31.791702 -7.09262 DZA,ESH,ESP Yes MAD Moroccan Dirham .ma 212 P2 MRC mr MC MA MAR MO MAR 169 2542007 Arabic,Berber ar-MA,fr
MCO MC 492 MONACO Monaco Europe Western Europe EU 43.750298 7.412841 FRA Yes EUR Euro .mc 377 O9 MCO mc MC MON MN MON 166 2993457 French fr-MC,en,it
MDA MD 498 MOLDOVA Chisinau Europe Eastern Europe EU 47.411631 28.369885 ROU,UKR 1 Yes MDL Moldovan Leu .md 373 MDA mv RM MD MDA MD MDA 165 617790 Moldavian ro,ru,gag,tr
MNE ME 499 MONTENEGRO Podgorica Europe Southern Europe EU 42.708678 19.37439 ALB,BIH,HRV,UNK,SRB Yes EUR Euro .me 382 Z5 MNE mo MNE MNE MJ MGO 2647 3194884 Montenegrin sr,hu,bs,sq,hr,rom
MAF MF 663 SAINT MARTIN (FRENCH PART) Marigot Americas Caribbean NA 18.08333333 -63.95 SXM Part of FR EUR Euro .gp 590 st RN 3578421 French fr
MDG MG 450 MADAGASCAR Antananarivo Africa Eastern Africa AF -18.766947 46.869107 Yes MGA Malagasy Ariary .mg 261 N6 MDG mg MG RM MAD MA MAD 150 1062947 French,Malagasy fr-MG,mg
MHL MH 584 MARSHALL ISLANDS Majuro Oceania Micronesia OC 7.131474 171.184478 Yes USD US Dollar .mh 692 1T MHL xe MH MHL RM MSH 157 2080185 English,Marshallese mh,en-MH
MKD MK 807 MACEDONIA [FYROM] Skopje Europe Southern Europe EU 41.608635 21.745275 ALB,BGR,GRC,UNK,SRB 1 Yes MKD Macedonian Denar .mk 389 MKD xn MJ MK MKD MK MKD 241 718075 Macedonian mk,sq,tr,rmm,sr
MLI ML 466 MALI Bamako Africa Western Africa AF 17.570692 -3.996166 DZA,BFA,GIN,CIV,MRT,NER,SEN 1 Yes XOF CFA Franc BCEAO .ml 223 O0 MLI ml MI RMM MLI ML MLI 155 2453866 French fr-ML,bm
MMR MM 104 MYANMAR Naypyidaw Asia South-Eastern Asia AS 21.913965 95.956223 BGD,CHN,IND,LAO,THA Yes MMK Kyat .mm 95 E1 MYA br BM BUR MYA BM MYA 171 1327865 Burmese my
MNG MN 496 MONGOLIA Ulan Bator Asia Eastern Asia AS 46.862496 103.846656 CHN,RUS 1 Yes MNT Tugrik .mn 976 P0 MNG mp MO MGL MNG MG MGL 167 2029969 Mongolian mn,ru
MAC MO 446 MACAO Asia Eastern Asia AS 22.198745 113.543873 CHN Part of CN MOP Macanese Pataca .mo 853 MAC MU MAC MC MAC 149 1821275 Portuguese,Chinese zh,zh-MO,pt
MNP MP 580 NORTHERN MARIANA ISLANDS Saipan Oceania Micronesia OC 17.33083 145.38469 Commonwealth of US USD US Dollar .mp 1670 1V MRA nw MY USA NMI CQ NMA 185 4041468 Carolinian,Chamorro,English fil,tl,zh,ch-MP,en-MP
MTQ MQ 474 MARTINIQUE Fort-de-France Americas Caribbean NA 14.641528 -61.024174 Part of FR EUR Euro .mq 596 O2 MRT mq MR F MTQ MB MRT 158 3570311 French fr-MQ
MRT MR 478 MAURITANIA Nouakchott Africa Western Africa AF 21.00789 -10.940835 DZA,MLI,SEN,ESH Yes MRO Ouguiya .mr 222 O3 MTN mu MT RIM MTN MR MTN 159 2378080 Arabic ar-MR,fuc,snk,fr,mey,wo
MSR MS 500 MONTSERRAT Plymouth Americas Caribbean NA 16.742498 -62.187366 Territory of GB XCD East Caribbean Dollar .ms 1664 P1 MSR mj MSR MH MNT 168 3578097 English en-MS
MLT MT 470 MALTA Valletta Europe Southern Europe EU 35.937496 14.375416 Yes EUR Euro .mt 356 O1 MLT mm ML M MLT MT MLT 156 2562770 English,Maltese mt,en-MT
MUS MU 480 MAURITIUS Port Louis Africa Eastern Africa AF -20.348404 57.552152 Yes MUR Mauritius Rupee .mu 230 O4 MAU mf MA MS MRI MP MRI 160 934292 English,French,Mauritian Creole en-MU,bho,fr
MDV MV 462 MALDIVES Male Asia Southern Asia AS 3.202778 73.22068 Yes MVR Rufiyaa .mv 960 N9 MLD xc MV MDV MV MDV 154 1282028 Maldivian dv,en
MWI MW 454 MALAWI Lilongwe Africa Eastern Africa AF -13.254308 34.301525 MOZ,TZA,ZMB 1 Yes MWK Kwacha .mw 265 N7 MWI mw MW MW MWI MI MAW 152 927384 English,Chewa ny,yao,tum,swk
MEX MX 484 MEXICO Mexico City Americas Central America NA 23.634501 -102.552784 BLZ,GTM,USA Yes MXN Mexican Peso .mx 52 O5 MEX mx MX MEX MEX MX MEX 162 3996063 Spanish es-MX
MYS MY 458 MALAYSIA Kuala Lumpur Asia South-Eastern Asia AS 4.210484 101.975766 BRN,IDN,THA Yes MYR Malaysian Ringgit .my 60 N8 MLA my MS MAL MAS MY MAS 153 1733045 English,Malay ms-MY,en,zh,ta,te,ml,pa,th
MOZ MZ 508 MOZAMBIQUE Maputo Africa Eastern Africa AF -18.665695 35.529562 MWI,ZAF,SWZ,TZA,ZMB,ZWE Yes MZN Mozambique Metical .mz 258 P3 MOZ mz MZ MOC MOZ MZ MOZ 170 1036973 Portuguese pt-MZ,vmw
NAM NA 516 NAMIBIA Windhoek Africa Southern Africa AF -22.95764 18.49041 AGO,BWA,ZAF,ZMB NAD Namibian Dollar .na 264 Afrikaans,German,English,Herero,Khoekhoe,Kwangali,Lozi,Ndonga,Tswana
NCL NC 540 NEW CALEDONIA Noumea Oceania Melanesia OC -20.904305 165.618042 Territory of FR XPF CFP Franc .nc 687 1W NCL nl NC F NCL NC NCD 178 2139685 French fr-NC
NER NE 562 NIGER Niamey Africa Western Africa AF 17.607789 8.081666 DZA,BEN,BFA,TCD,LBY,MLI,NGA 1 Yes XOF CFA Franc BCEAO .ne 227 Q4 NGR ng NR RN NIG NG NIG 181 2440476 French fr-NE,ha,kr,dje
NFK NF 574 NORFOLK ISLAND Kingston Oceania Australia and New Zealand OC -29.040835 167.954712 Territory of AU AUD Australian Dollar .nf 672 Q7 NFK nx NF AUS NFK NF NFI 184 2155115 English,Norfuk en-NF
NGA NG 566 NIGERIA Abuja Africa Western Africa AF 9.081999 8.675277 BEN,CMR,TCD,NER Yes NGN Naira .ng 234 Q5 NIG nr NI NGR NGA NI NGR 182 2328926 English en-NG,ha,yo,ig,ff
NIC NI 558 NICARAGUA Managua Americas Central America NA 12.865416 -85.207229 CRI,HND Yes NIO Cordoba Oro .ni 505 Q3 NCG nq NK NIC NCA NU NCA 180 3617476 Spanish es-NI,en
NLD NL 528 NETHERLANDS Amsterdam Europe Western Europe EU 52.132633 5.291266 BEL,DEU Yes EUR Euro .nl 31 P7 HOL ne NL NL NED NL NED 177 2750405 Dutch nl-NL,fy-NL
NOR NO 578 NORWAY Oslo Europe Northern Europe EU 60.472024 8.468946 FIN,SWE,RUS Yes NOK Norwegian Krone .no 47 Q8 NOR no NO N NOR NO NOR 186 3144096 Norwegian Nynorsk,Norwegian Bokm�l,Sami no,nb,nn,se,fi
NPL NP 524 NEPAL Kathmandu Asia Southern Asia AS 28.394857 84.124008 CHN,IND 1 Yes NPR Nepalese Rupee .np 977 P6 NPL np NP NEP NEP NP NEP 175 1282988 Nepali ne,en
NRU NR 520 NAURU Yaren Oceania Micronesia OC -0.522778 166.931503 Yes AUD Australian Dollar .nr 674 P5 NRU nu NW NAU NRU NR NRU 173 2110425 English,Nauru na,en-NR
NIU NU 570 NIUE Alofi Oceania Polynesia OC -19.054445 -169.867233 Associated with NZ NZD New Zealand Dollar .nu 683 Q6 NIU xh NZ NIU NE NIU 183 4036232 English,Niuean niu,en-NU
NZL NZ 554 NEW ZEALAND Wellington Oceania Australia and New Zealand OC -40.900557 174.885971 Yes NZD New Zealand Dollar .nz 64 Q2 NZL nz NZ NZ NZL NZ NZL 179 2186224 English,M_ori,New Zealand Sign Language en-NZ,mi
OMN OM 512 OMAN Muscat Asia Western Asia AS 21.512583 55.923255 SAU,ARE,YEM Yes OMR Rial Omani .om 968 P4 OMA mk OM OMA MU OMA 187 286963 Arabic ar-OM,en,bal,ur
PAN PA 591 PANAMA Panama City Americas Central America NA 8.537981 -80.782127 COL,CRI Yes PAB Panamanian Balboa .pa 507 R1 PNR pn PM PA PAN PM PAN 191 3703430 Spanish es-PA,en
PER PE 604 PERU Lima Americas South America SA -9.189967 -75.015152 BOL,BRA,CHL,COL,ECU Yes PEN Nuevo Sol .pe 51 R5 PRU pe PR PE PER PE PER 195 3932488 Aymara,Quechua,Spanish es-PE,qu,ay
PYF PF 258 FRENCH POLYNESIA Papeete Oceania Polynesia OC -17.679742 -149.406843 Territory of FR XPF CFP Franc .pf 689 I4 OCE fp PF F TAH FP FPO 87 4030656 French fr-PF,ty
PNG PG 598 PAPUA NEW GUINEA Port Moresby Oceania Melanesia OC -6.314993 143.95555 IDN Yes PGK Kina .pg 675 R2 PNG pp NG PNG PNG PP PNG 192 2088628 English,Hiri Motu,Tok Pisin en-PG,ho,meu,tpi
PHL PH 608 PHILIPPINES Manila Asia South-Eastern Asia AS 12.879721 121.774017 Yes PHP Philippine Peso .ph 63 R6 PHL ph PH RP PHI RP PHI 196 1694008 English,Filipino tl,en-PH,fil
PAK PK 586 PAKISTAN Islamabad Asia Southern Asia AS 30.375321 69.345116 AFG,CHN,IND,IRN Yes PKR Pakistan Rupee .pk 92 R0 PAK pk PK PK PAK PK PAK 188 1168579 English,Urdu ur-PK,en-PK,pa,sd,ps,brh
POL PL 616 POLAND Warsaw Europe Eastern Europe EU 51.919438 19.145136 BLR,CZE,DEU,LTU,RUS,SVK,UKR Yes PLN Zloty .pl 48 R9 POL pl PL PL POL PL POL 198 798544 Polish pl
SPM PM 666 SAINT PIERRE AND MIQUELON Saint-Pierre Americas Northern America NA 46.941936 -56.27111 Part of FR EUR Euro .pm 508 V0 SPM xl FP F SPM SB SPM 210 3424932 French fr-PM
PCN PN 612 PITCAIRN Adamstown Oceania Polynesia OC -24.703615 -127.439308 Territory of GB NZD New Zealand Dollar .pn 64 R8 PTC pc PT PCN PC 197 4030699 English en-PN
PRI PR 630 PUERTO RICO San Juan Americas Caribbean NA 18.220833 -66.590149 Commonwealth of US USD US Dollar .pr 1787, 1939 PR PTR pr PU USA PUR RQ PUR 200 4566966 English,Spanish en-PR,es-PR
PSE PS 275 PALESTINE, STATE OF East Jerusalem Asia Western Asia AS 31.952162 35.233154 ISR,EGY,JOR In contention ILS Israeli New Shekel .ps 970 gz,wj PLE GZ,WE PLE 91267 6254930 Arabic ar-PS administrative center is Ramallah
PRT PT 620 PORTUGAL Lisbon Europe Southern Europe EU 39.399872 -8.224454 ESP Yes EUR Euro .pt 351 S1 POR po PO P POR PO POR 199 2264397 Portuguese pt-PT,mwl
PLW PW 585 PALAU Ngerulmud Oceania Micronesia OC 7.51498 134.58252 Yes USD US Dollar .pw 680 1Y PLW pw PLW PS PLW 189 1559582 English,Palauan pau,sov,en-PW,tox,ja,fil,zh
PRY PY 600 PARAGUAY Asuncion Americas South America SA -23.442503 -58.443832 ARG,BOL,BRA 1 Yes PYG Guarani .py 595 R4 PRG py PY PY PAR PA PAR 194 3437598 Guaran�,Spanish es-PY,gn
QAT QA 634 QATAR Doha Asia Western Asia AS 25.354826 51.183884 SAU Yes QAR Qatari Rial .qa 974 S3 QAT qa QT Q QAT QA QAT 201 289688 Arabic ar-QA,es
REU RE 638 R�UNION Saint-Denis Africa Eastern Africa AF -21.115141 55.536384 Part of FR EUR Euro .re 262 REU re RE F REU RE REU 206 935317 French fr-RE
ROU RO 642 ROMANIA Bucharest Europe Eastern Europe EU 45.943161 24.96676 BGR,HUN,MDA,SRB,UKR Yes RON New Romanian Leu .ro 40 S5 ROU rm RO RO ROU RO ROU 203 798549 Romanian ro,hu,rom
SRB RS 688 SERBIA Belgrade Europe Southern Europe EU 44.016521 21.005859 BIH,BGR,HRV,HUN,UNK,MKD,MNE,ROU 1 Yes RSD Serbian Dinar .rs 381 Z2 SRB rb YG SRB SRB RI,KV SRB 2648 6290252 Serbian sr,hu,bs,rom
RUS RU 643 RUSSIAN FEDERATION Moscow Europe Eastern Europe EU 61.52401 105.318756 AZE,BLR,CHN,EST,FIN,GEO,KAZ,PRK,LVA,LTU,MNG,NOR,POL,UKR Yes RUB Russian Ruble .ru 7 1Z RUS ru RS RUS RUS RS RUS 204 2017370 Russian ru,tt,xal,cau,ady,kv,ce,tyv,cv,udm,tut,mns,bua,myv,mdf,chm,ba,inh,tut,kbd,krc,ava,sah,nog
RWA RW 646 RWANDA Kigali Africa Eastern Africa AF -1.940278 29.873888 BDI,COD,TZA,UGA 1 Yes RWF Rwanda Franc .rw 250 S6 RRW rw RW RWA RWA RW RWA 205 49518 English,French,Kinyarwanda rw,en-RW,fr-RW,sw
SAU SA 682 SAUDI ARABIA Riyadh Asia Western Asia AS 23.885942 45.079162 IRQ,JOR,KWT,OMN,QAT,ARE,YEM Yes SAR Saudi Riyal .sa 966 T0 ARS su SD SA KSA SA KSA 215 102358 Arabic ar-SA
SLB SB 90 SOLOMON ISLANDS Honiara Oceania Melanesia OC -9.64571 160.156194 Yes SBD Solomon Islands Dollar .sb 677 D7 SLM bp SO SOL BP SOL 225 2103350 English en-SB,tpi
SYC SC 690 SEYCHELLES Victoria Africa Eastern Africa AF -4.679574 55.491977 Yes SCR Seychelles Rupee .sc 248 T2 SEY se SC SY SEY SE SEY 220 241170 Seychellois Creole,English,French en-SC,fr-SC
SDN SD 729 SUDAN Khartoum Africa Northern Africa AF 12.862807 30.217636 CAF,TCD,EGY,ERI,ETH,LBY,SSD Yes SDG Sudanese Pound .sd 249 V2 SDN sj SU SUD SUD SU SUD 40764 366755 Arabic,English ar-SD,en,fia
SWE SE 752 SWEDEN Stockholm Europe Northern Europe EU 60.128161 18.643501 FIN,NOR Yes SEK Swedish Krona .se 46 V7 S sw SN S SWE SW SWE 236 2661886 Swedish sv-SE,se,sma,fi-SE
SGP SG 702 SINGAPORE Singapore Asia South-Eastern Asia AS 1.352083 103.819836 Yes SGD Singapore Dollar .sg 65 U0 SNG si SR SGP SIN SN SIN 222 1880251 Mandarin,English,Malay,Tamil cmn,en-SG,ms-SG,ta-SG,zh-SG
SHN SH 654 SAINT HELENA, ASCENSION AND TRISTAN DA CUNH Jamestown Africa Western Africa AF -24.143474 -10.030696 Territory of GB SHP Saint Helena Pound .sh 290 SHN xj HE SHN SH HEL 207 3370751 en-SH
SVN SI 705 SLOVENIA Ljubljana Europe Southern Europe EU 46.151241 14.995463 AUT,HRV,ITA,HUN Yes EUR Euro .si 386 2A SVN xv LJ SLO SVN SI SLO 224 3190538 Slovene sl,sh
SJM SJ 744 SVALBARD AND JAN MAYEN Longyearbyen Europe Northern Europe EU 77.553604 23.670272 Territory of NO NOK Norwegian Krone .sj 47 NOR SZ SV,JN 234 607072 Norwegian no,ru
SVK SK 703 SLOVAKIA Bratislava Europe Eastern Europe EU 48.669026 19.699024 AUT,CZE,HUN,POL,UKR 1 Yes EUR Euro .sk 421 2B SVK xo SQ SK SVK LO SVK 223 3057568 Slovak sk,hu
SLE SL 694 SIERRA LEONE Freetown Africa Western Africa AF 8.460555 -11.779889 GIN,LBR Yes SLL Leone .sl 232 T8 SRL sl SL WAL SLE SL SLE 221 2403846 English en-SL,men,tem
SMR SM 674 SAN MARINO City of San Marino Europe Southern Europe EU 43.94236 12.457777 ITA 1 Yes EUR Euro .sm 378 S8 SMR sm RSM SMR SM SMR 213 3168068 Italian it-SM
SEN SN 686 SENEGAL Dakar Africa Western Africa AF 14.497401 -14.452362 GMB,GIN,GNB,MLI,MRT Yes XOF CFA Franc BCEAO .sn 221 T1 SEN sg SG SN SEN SG SEN 217 2245662 French fr-SN,wo,fuc,mnk
SOM SO 706 SOMALIA Mogadishu Africa Eastern Africa AF 5.152149 46.199616 DJI,ETH,KEN Yes SOS Somali Shilling .so 252 U1 SOM so SI SO SOM SO SOM 226 51537 Arabic,Somali so-SO,ar-SO,it,en-SO
SUR SR 740 SURINAME Paramaribo Americas South America SA 3.919305 -56.027783 BRA,GUF,GUY Yes SRD Surinam Dollar .sr 597 V3 SUR sr SM SME SUR NS SUR 233 3382998 Dutch nl-SR,en,srn,hns,jv
SSD SS 728 SOUTH SUDAN Juba Africa Middle Africa AF 4.85 31.6 CAF,COD,ETH,KEN,SDN,UGA 1 Yes SSP South Sudanese Pound .ss 211 SSD sd OD 7909807 English en
STP ST 678 SAO TOME AND PRINCIPE Sao Tome Africa Middle Africa AF 0.18636 6.613081 Yes STD Dobra .st 239 S9 STP sf TP STP TP STP 214 2410758 Portuguese pt-ST
SLV SV 222 EL SALVADOR San Salvador Americas Central America NA 13.794185 -88.89653 GTM,HND Yes USD US Dollar .sv 503 H3 SLV es ES ES SLV ES ESA 75 3585968 Spanish es-SV
SXM SX 534 SINT MAARTEN (DUTCH PART) Philipsburg Americas Caribbean NA 18.033333 -63.05 MAF Part of NL ANG Netherlands Antillean Guilder .sx 1721 sn NN 7609695 English,French,Dutch nl,en
SYR SY 760 SYRIAN ARAB REPUBLIC Damascus Asia Western Asia AS 34.802075 38.996815 IRQ,ISR,JOR,LBN,TUR Yes SYP Syrian Pound .sy 963 V9 SYR sy SY SYR SYR SY SYR 238 163843 Arabic ar-SY,ku,hy,arc,fr,en
SWZ SZ 748 SWAZILAND Lobamba Africa Southern Africa AF -26.522503 31.465866 MOZ,ZAF 1 Yes SZL Lilangeni .sz 268 V6 SWZ sq SV SD SWZ WZ SWZ 235 934841 English,Swazi en-SZ,ss-SZ administrative capital is Mbabane
TCA TC 796 TURKS AND CAICOS ISLANDS Cockburn Town Americas Caribbean NA 21.694025 -71.797928 Territory of GB USD US Dollar .tc 1649 W7 TCA tc TI TCA TK TKS 251 3576916 English en-TC
TCD TD 148 CHAD N'Djamena Africa Middle Africa AF 15.454166 18.732207 CMR,CAF,LBY,NER,NGA,SSD 1 Yes XAF CFA Franc BEAC .td 235 F2 TCD cd CD TCH CHA CD CHA 50 2434508 Arabic,French fr-TD,ar-TD,sre
ATF TF 260 FRENCH SOUTHERN TERRITORIES Port-aux-Francais Africa South-Eastern Africa AF -49.280366 69.348557 Territory of FR EUR Euro .tf 262 fs F FS 88 1546748 French fr
TGO TG 768 TOGO Lome Africa Western Africa AF 8.619543 0.824782 BEN,BFA,GHA Yes XOF CFA Franc BCEAO .tg 228 W2 TGO tg TG TG TOG TO TOG 243 2363686 French fr-TG,ee,hna,kbp,dag,ha
THA TH 764 THAILAND Bangkok Asia South-Eastern Asia AS 15.870032 100.992541 MMR,KHM,LAO,MYS Yes THB Baht .th 66 W1 THA th TH T THA TH THA 240 1605651 Thai th,en
TJK TJ 762 TAJIKISTAN Dushanbe Asia Central Asia AS 38.861034 71.276093 AFG,CHN,KGZ,UZB 1 Yes TJS Somoni .tj 992 2D TJK ta TA TJ TJK TI TJK 239 1220409 Russian,Tajik tg,ru
TKL TK 772 TOKELAU Oceania Polynesia OC -8.967363 -171.855881 Territory of NZ NZD New Zealand Dollar .tk 690 W3 TKL tl TK NZ TKL TL 244 4031074 English,Samoan,Tokelauan tkl,en-TK undetermined capital
TLS TL 626 TIMOR-LESTE Dili Asia South-Eastern Asia OC -8.874217 125.727539 IDN Yes USD US Dollar .tl 670 Z3 TLS em TM TLS TT TLS 242 1966436 Portuguese,Tetum tet,pt-TL,id,en
TKM TM 795 TURKMENISTAN Ashgabat Asia Central Asia AS 38.969719 59.556278 AFG,IRN,KAZ,UZB 1 Yes TMT Turkmenistan New Manat .tm 993 2E TKM tk TR TM TKM TX TKM 250 1218197 Russian,Turkmen tk,ru,uz
TUN TN 788 TUNISIA Tunis Africa Northern Africa AF 33.886917 9.537499 DZA,LBY Yes TND Tunisian Dinar .tn 216 W6 TUN ti TS TN TUN TS TUN 248 2464461 Arabic ar-TN,fr
TON TO 776 TONGA Nuku'alofa Oceania Polynesia OC -21.178986 -175.198242 Yes TOP Pa�anga .to 676 W4 TON to TO TGA TN TGA 245 4032283 English,Tongan to,en-TO
TUR TR 792 TURKEY Ankara Asia Western Asia AS 38.963745 35.243322 ARM,AZE,BGR,GEO,GRC,IRN,IRQ,SYR Yes TRY Turkish Lira .tr 90 W8 TUR tu TU TR TUR TU TUR 249 298795 Turkish tr-TR,ku,diq,az,av
TTO TT 780 TRINIDAD AND TOBAGO Port of Spain Americas Caribbean NA 10.691803 -61.222503 Yes TTD Trinidad and Tobago Dollar .tt 1868 W5 TRD tr TD TT TRI TD TTO 246 3573591 English en-TT,hns,fr,es,zh
TUV TV 798 TUVALU Funafuti Oceania Polynesia OC -7.109535 177.64933 Yes AUD Australian Dollar .tv 688 2G TUV tv TV TUV TV TUV 252 2110297 English,Tuvaluan tvl,en,sm,gil
TWN TW 158 TAIWAN Taipei Asia Eastern Asia AS 23.69781 120.960515 Yes TWD New Taiwan Dollar .tw 886 ch RC TPE TW TPE 925 1668284 Mandarin zh-TW,zh,nan,hak
TZA TZ 834 TANZANIA Dodoma Africa Eastern Africa AF -6.369028 34.888822 BDI,COD,KEN,MWI,MOZ,RWA,UGA,ZMB Yes TZS Tanzanian Shilling .tz 255 TZA tz TN EAT TAN TZ TAN 257 149590 English,Swahili sw-TZ,en,ar
UKR UA 804 UKRAINE Kiev Europe Eastern Europe EU 48.379433 31.16558 BLR,HUN,MDA,POL,ROU,RUS,SVK Yes UAH Hryvnia .ua 380 2H UKR un UR UA UKR UP UKR 254 690791 Russian,Ukrainian uk,ru-UA,rom,pl,hu
UGA UG 800 UGANDA Kampala Africa Eastern Africa AF 1.373333 32.290275 COD,KEN,RWA,SSD,TZA 1 Yes UGX Uganda Shilling .ug 256 W9 UGA ug UG EAU UGA UG UGA 253 226074 English,Swahili en-UG,lg,sw,ar
UMI UM 581 U.S. MINOR OUTLYING ISLANDS Americas Northern America OC 16.73694444 -169.5238889 Territories of US USD US Dollar .um 0 ji,xf,wk,uc,up USA FQ,HQ,DQ,JQ,KQ,MQ,BQ,LQ,WQ 5854968 English en-UM
USA US 840 UNITED STATES Washington D.C. Americas Northern America NA 37.09024 -95.712891 CAN,MEX Yes USD US Dollar .us 1 USA xxu US USA USA US USA 259 6252001 English en-US,es-US,haw,fr
URY UY 858 URUGUAY Montevideo Americas South America SA -32.522779 -55.765835 ARG,BRA Yes UYU Uruguayan Peso .uy 598 X3 URG uy UY ROU URU UY URU 260 3439705 Spanish es-UY
UZB UZ 860 UZBEKISTAN Tashkent Asia Central Asia AS 41.377491 64.585262 AFG,KAZ,KGZ,TJK,TKM 1 Yes UZS Uzbekistan Sum .uz 998 2K UZB uz UZ UZ UZB UZ UZB 261 1512440 Russian,Uzbek uz,ru,tg
VAT VA 336 VATICAN CITY Vatican City Europe Southern Europe EU 41.902916 12.453389 ITA 1 Yes EUR Euro .va 379 CVA vc V VAT VT 110 3164670 Italian,Latin la,it,fr
VCT VC 670 SAINT VINCENT AND THE GRENADINES Kingstown Americas Caribbean NA 12.984305 -61.287228 Yes XCD East Caribbean Dollar .vc 1784 V1 VCT xm VG WV VIN VC VIN 211 3577815 English en-VC,fr
VEN VE 862 VENEZUELA Caracas Americas South America SA 6.42375 -66.58973 BRA,COL,GUY Yes VEF Venezuelan Bol�var .ve 58 VEN ve VN YV VEN VE VEN 263 3625428 Spanish es-VE
VGB VG 92 BRITISH VIRGIN ISLANDS Road Town Americas Caribbean NA 18.420695 -64.639968 Territory of GB USD US Dollar .vg 1284 VRG vb VI BVI VGB VI IVB 39 3577718 English en-VG
VIR VI 850 U.S. VIRGIN ISLANDS Charlotte Amalie Americas Caribbean NA 18.335765 -64.896335 Territory of US USD US Dollar .vi 1340 VIR vi VI USA VIR VQ ISV 258 4796775 English en-VI
VNM VN 704 VIETNAM Hanoi Asia South-Eastern Asia AS 14.058324 108.277199 KHM,CHN,LAO Yes VND Dong .vn 84 Q1 VTN vm VS VN VIE VM VIE 264 1562822 Vietnamese vi,en,fr,zh,km
VUT VU 548 VANUATU Port Vila Oceania Melanesia OC -15.376706 166.959158 Yes VUV Vatu .vu 678 2L VUT nn NV VAN NH VAN 262 2134431 Bislama,English,French bi,en-VU,fr-VU
WLF WF 876 WALLIS AND FUTUNA Mata-Utu Oceania Polynesia OC -13.768752 -177.156097 Territory of FR XPF CFP Franc .wf 681 WAL wf FW F WLF WF WAF 266 4034749 French wls,fud,fr-WF
WSM WS 882 SAMOA Apia Oceania Polynesia OC -13.759029 -172.104629 Yes WST Tala .ws 685 Y0 SMO ws ZM WS SAM WS SAM 212 4034894 English,Samoan sm,en-WS
YEM YE 887 YEMEN Sanaa Asia Western Asia AS 15.552727 48.516388 OMN,SAU Yes YER Yemeni Rial .ye 967 T7 YEM ye YE YAR YEM YM YEM 269 69543 Arabic ar-YE
MYT YT 175 MAYOTTE Mamoudzou Africa Eastern Africa AF -12.8275 45.166244 Part of FR EUR Euro .yt 262 2P MYT ot MYT MF MAY 161 1024031 French fr-YT
ZAF ZA 710 SOUTH AFRICA Pretoria Africa Southern Africa AF -30.559482 22.937506 BWA,LSO,MOZ,NAM,SWZ,ZWE Yes ZAR Rand .za 27 T3 AFS sa ZA ZA RSA SF RSA 227 953987 Afrikaans,English,Southern Ndebele,Northern Sotho,Southern Sotho,Swazi,Tswana,Tsonga,Venda,Xhosa,Zulu zu,xh,af,nso,en-ZA,tn,st,ts,ss,ve,nr
ZMB ZM 894 ZAMBIA Lusaka Africa Eastern Africa AF -13.133897 27.849332 AGO,BWA,COD,MWI,MOZ,NAM,TZA,ZWE 1 Yes ZMW Zambian Kwacha .zm 260 Y4 ZMB za ZB Z ZAM ZA ZAM 270 895949 English en-ZM,bem,loz,lun,lue,ny,toi
ZWE ZW 716 ZIMBABWE Harare Africa Eastern Africa AF -19.015438 29.154857 BWA,MOZ,ZAF,ZMB 1 Yes ZWL Zimbabwe Dollar .zw 263 Y5 ZWE rh ZW ZW ZIM ZI ZIM 271 878675 Chibarwe,English,Kalanga,Khoisan,Ndau,Northern Ndebele,Chewa,Shona,Sotho,Tonga,Tswana,Tsonga,Venda,Xhosa,Zimbabwean Sign Language en-ZW,sn,nr,nd
package com.budhash.common.location;
import com.budhash.common.utils.Converter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Created by budha on 7/20/16.
*/
public enum Country {
XX, AND, ARE, AFG, ATG, AIA, ALB, ARM, AGO, ATA, ARG, ASM, AUT, AUS, ABW, ALA, AZE, BIH, BRB, BGD, BEL, BFA, BGR, BHR, BDI, BEN, BLM, BMU, BRN, BOL, BES, BRA, BHS, BTN, BVT, BWA, BLR, BLZ, CAN, CCK, COD, CAF, COG, CHE, CIV, COK, CHL, CMR, CHN, COL, CRI, CUB, CPV, CUW, CXR, CYP, CZE, DEU, DJI, DNK, DMA, DOM, DZA, ECU, EST, EGY, ESH, ERI, ESP, ETH, FIN, FJI, FLK, FSM, FRO, FRA, GAB, GBR, GRD, GEO, GUF, GGY, GHA, GIB, GRL, GMB, GIN, GLP, GNQ, GRC, SGS, GTM, GUM, GNB, GUY, HKG, HMD, HND, HRV, HTI, HUN, IDN, IRL, ISR, IMN, IND, IOT, IRQ, IRN, ISL, ITA, JEY, JAM, JOR, JPN, KEN, KGZ, KHM, KIR, COM, KNA, PRK, KOR, KWT, CYM, KAZ, LAO, LBN, LCA, LIE, LKA, LBR, LSO, LTU, LUX, LVA, LBY, MAR, MCO, MDA, MNE, MAF, MDG, MHL, MKD, MLI, MMR, MNG, MAC, MNP, MTQ, MRT, MSR, MLT, MUS, MDV, MWI, MEX, MYS, MOZ, NAM, NCL, NER, NFK, NGA, NIC, NLD, NOR, NPL, NRU, NIU, NZL, OMN, PAN, PER, PYF, PNG, PHL, PAK, POL, SPM, PCN, PRI, PSE, PRT, PLW, PRY, QAT, REU, ROU, SRB, RUS, RWA, SAU, SLB, SYC, SDN, SWE, SGP, SHN, SVN, SJM, SVK, SLE, SMR, SEN, SOM, SUR, SSD, STP, SLV, SXM, SYR, SWZ, TCA, TCD, ATF, TGO, THA, TJK, TKL, TLS, TKM, TUN, TON, TUR, TTO, TUV, TWN, TZA, UKR, UGA, UMI, USA, URY, UZB, VAT, VCT, VEN, VGB, VIR, VNM, VUT, WLF, WSM, YEM, MYT, ZAF, ZMB, ZWE;
private final static Logger LOGGER = LoggerFactory.getLogger(Country.class);
private static final CountryRecords COUNTRY_RECORD_MAP;
static {
COUNTRY_RECORD_MAP = new CountryRecords("src/main/resources/location/countries.csv");
COUNTRY_RECORD_MAP.process();
}
public String iso2() {
return get(CountrySchema.ISO2);
}
public Integer isoNum() {
return get(CountrySchema.ISONUM);
}
public String countryName() {
return get(CountrySchema.COUNTRY);
}
public String capital() {
return get(CountrySchema.CAPITAL);
}
public String region() {
return get(CountrySchema.REGION);
}
public String subRegion() {
return get(CountrySchema.SUBREGION);
}
public Continent continent() {
return get(CountrySchema.CONTINENT);
}
public GeoCoord coordinates() {
return get(CountrySchema.GEOCOORD);
}
public String independenceStatus() {
return get(CountrySchema.INDEPENDENT);
}
public Currency currency() {
return get(CountrySchema.CURRENCY);
}
public String tld() {
return get(CountrySchema.TLD);
}
public List<Integer> callingCode() {
return get(CountrySchema.CALLINGCODE);
}
public String code(final CodeType type) {
switch (type) {
case EDGAR:
return get(CountrySchema.EDGAR);
case ITU:
return get(CountrySchema.ITU);
case MARC:
return get(CountrySchema.MARC);
case WMO:
return get(CountrySchema.WMO);
case DS:
return get(CountrySchema.DS);
case FIFA:
return get(CountrySchema.FIFA);
case FIPS:
return get(CountrySchema.FIPS);
case IOC:
return get(CountrySchema.IOC);
case GAUL:
return get(CountrySchema.GAUL);
default:
return "";
}
}
public List<String> languages() {
return get(CountrySchema.LANGUAGES);
}
public List<String> languageCodes() {
return get(CountrySchema.LANGUAGECODE);
}
public enum CodeType {
EDGAR, ITU, MARC, WMO, DS, FIFA, FIPS, IOC, GAUL;
}
protected <T> T get(final CountrySchema column) {
return (T) COUNTRY_RECORD_MAP.get(this).get(column);
}
private static interface CsvColumn {
int getColumnNumber();
Class getType();
Object getDefaultValue();
Boolean isCollection();
}
private static interface CsvSchema {
List<CsvColumn> getColumns();
}
enum CountrySchema implements CsvColumn, CsvSchema {
ISO3(0, String.class, ""),
ISO2(1, String.class, ""),
ISONUM(2, Integer.class, -1),
COUNTRY(3, String.class, Country.XX),
CAPITAL(4, String.class, ""),
REGION(5, String.class, ""),
SUBREGION(6, String.class, ""),
CONTINENT(7, Continent.class, ""),
LATITUDE(8, Double.class, 0.00),
LONGITUDE(9, Double.class, 0.00),
//BORDERS(10, Country.class, Arrays.asList(), true),
//LANDLOCKED(11, Boolean.class, false),
INDEPENDENT(12, String.class, ""),
CURRENCYCODE(13, String.class, ""),
CURRENCYNAME(14, String.class, ""),
TLD(15, String.class, ""),
CALLINGCODE(16, Integer.class, Arrays.asList(), true),
EDGAR(17, String.class, ""),
ITU(18, String.class, ""),
MARC(19, String.class, ""),
WMO(20, String.class, ""),
DS(21, String.class, ""),
FIFA(22, String.class, ""),
FIPS(23, String.class, ""),
IOC(24, String.class, ""),
GAUL(25, String.class, ""),
GEONAMEID(26, String.class, ""),
LANGUAGES(27, String.class, Arrays.asList(), true),
LANGUAGECODE(28, String.class, Arrays.asList(), true),
NOTES(-1, String.class, ""),
GEOCOORD(-1, GeoCoord.class, GeoCoord.NA()), //this is generated
CURRENCY(-1, Currency.class, Currency.getInstance(Locale.US)); //this is generated
final int columnNumber;
final Class type;
final Object defaultValue;
final Boolean isCollection;
CountrySchema(final int columnNumber, final Class type, final Object defaultValue) {
this(columnNumber, type, defaultValue, false);
}
CountrySchema(final int columnNumber, final Class type, final Object defaultValue, final Boolean isCollection) {
this.columnNumber = columnNumber;
this.type = type;
this.defaultValue = defaultValue;
this.isCollection = isCollection;
}
@Override
public int getColumnNumber() {
return columnNumber;
}
@Override
public Class getType() {
return type;
}
@Override
public Object getDefaultValue() {
return defaultValue;
}
@Override
public Boolean isCollection() {
return isCollection;
}
@Override
public List<CsvColumn> getColumns() {
return Arrays.asList(CountrySchema.values());
}
}
private static class CsvParser {
private static final String CSV_PATTERN = ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
private static final String DEFAULT_LIST_DILIMER = ",";
private final CsvSchema schema;
public CsvParser(final CsvSchema schema) {
this.schema = schema;
}
public CsvSchema getSchema() {
return schema;
}
public static <T> List<T> parseList(final CsvColumn column, final String value) {
return Converter.parseList(value, column.getType());
}
public static <T> T parseValue(final CsvColumn column, final String value) {
Optional optVal = Converter.parseValue(value, column.getType());
//return (C) optVal.get();
return (T) (optVal.isPresent() ? optVal.get() : column.getType().cast(column.getDefaultValue()));
}
public <C extends CsvColumn, V> Map<C, V> processRow(final String row) {
final List<String> recordRow = Arrays.asList(row.split(CSV_PATTERN));
final Map<C, V> rowMap = new HashMap<>();
for (CsvColumn column : getSchema().getColumns()) {
if (column.getColumnNumber() < 0)
continue;
if(column.getColumnNumber() < recordRow.size()) {
final String cellItem = recordRow.get(column.getColumnNumber());
final Object value =
column.isCollection() ? parseList(column, cellItem.replaceAll("\"","")) : parseValue(column, cellItem);
rowMap.put((C) column, (V) value);
}else{
rowMap.put((C) column,(V)column.getDefaultValue());
}
}
return rowMap;
}
}
private static class CountryRecords {
Map<Country, Map<CsvColumn, Object>> bag = new HashMap<>();
public Map<CsvColumn, Object> get(final Country country) {
return bag.get(country);
}
public <T> T get(final Country country, final CsvColumn column) {
return (T) column.getType().cast(bag.get(column).get(column));
}
final Path path;
final CsvParser parser;
public CountryRecords(final String path) {
this.path = Paths.get(path);
this.parser = new CsvParser(CountrySchema.ISO2);
}
protected Map<CsvColumn, Object> processRow(final String rowString){
final Map<CsvColumn, Object> csvRow = parser.processRow(rowString);
try {
csvRow.put(CountrySchema.GEOCOORD, new GeoCoord((double) csvRow.get(CountrySchema.LATITUDE), (double) csvRow.get(CountrySchema.LONGITUDE)));
final String curr = (String) csvRow.get(CountrySchema.CURRENCYCODE);
if (null != curr && !curr.isEmpty())
csvRow.put(CountrySchema.CURRENCY, Currency.getInstance(curr));
}catch (final Exception ex){
LOGGER.error("error parsing row: {}", rowString);
}
return csvRow;
}
public void process() {
List<String> rows = new ArrayList<>();
bag.clear();
try (Stream<String> stream = Files.lines(this.path)) {
bag = stream
.filter(s -> null!=s && !s.isEmpty())
.filter(s -> !s.trim().startsWith("#"))
.map(this::processRow)
.filter(m->null!=m && !m.isEmpty())
.collect(
HashMap::new,
(map,e)->{
final Country ctry = Country.valueOf((String) e.get(CountrySchema.ISO3));
map.put(ctry, e);
},
Map::putAll
);
} catch (final IOException e) {
e.printStackTrace();
}
}
}
}
public class CountryTest {
private final static Logger LOGGER = LoggerFactory.getLogger(CountryTest.class);
private static final String CSV_PATTERN = ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
@Test
public void testCountryEnum() throws Exception {
String fileName = "src/main/resources/location/countries.csv";
List<String> rows = new ArrayList<>();
List<List<String>> countryData = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
countryData = stream
.filter(s -> null!=s && !s.isEmpty())
.filter(line -> !line.trim().startsWith("#"))
.collect(
ArrayList::new,
(list,e)->{
if (null != e && !e.isEmpty())
list.add(Arrays.asList(e.split(CSV_PATTERN)));
},
ArrayList::addAll
);
} catch (IOException e) {
e.printStackTrace();
}
for(List<String> row : countryData){
Country ctry = Country.valueOf(row.get(0));
validate(ctry, row);
}
}
private void validate(final Country country, final List<String> row) {
LOGGER.info("");
LOGGER.info("validating : {}", country);
assertThat(country.iso2()).isEqualTo(row.get(1));
LOGGER.info("validating : isoNum -> {} = {}", country.isoNum(), row.get(2));
assertThat(country.isoNum()).isEqualTo(Integer.valueOf(row.get(2)));
LOGGER.info("validating : capital -> {} = {}", country.capital(), row.get(4));
assertThat(country.capital()).isEqualTo(row.get(4));
LOGGER.info("validating : region -> {} = {}", country.region(), row.get(5));
assertThat(country.region()).isEqualTo(row.get(5));
LOGGER.info("validating : subRegion -> {} = {}", country.region(), row.get(6));
assertThat(country.subRegion()).isEqualTo(row.get(6));
LOGGER.info("validating : continent -> {} = {}", country.continent(), row.get(7));
assertThat(country.continent()).isEqualTo(Continent.valueOf(row.get(7)));
LOGGER.info("validating : coordinates -> {} = ({}:{})", country.coordinates(), Double.parseDouble(row.get(8)),Double.parseDouble(row.get(9)));
assertThat(country.coordinates()).isEqualTo(new GeoCoord(Double.parseDouble(row.get(8)),Double.parseDouble(row.get(9))));
LOGGER.info("validating : independenceStatus -> {} = {}", country.independenceStatus(), row.get(12));
assertThat(country.independenceStatus()).isEqualTo(row.get(12));
LOGGER.info("validating : currency -> {} = {}", country.currency(), row.get(13));
if(!StringUtils.isBlank(row.get(13)))
assertThat(country.currency()).isEqualTo(Currency.getInstance(row.get(13)));
else
assertThat(country.currency()).isNull();
LOGGER.info("validating : tld -> {} = {}", country.tld(), row.get(15));
assertThat(country.tld()).isEqualTo(row.get(15));
LOGGER.info("validating : callingCode {} = {}", country.callingCode(), row.get(16));
assertThat(country.callingCode()).containsAll(Converter.toList(Arrays.asList(row.get(16).replaceAll("\"","").split(",")), Integer.class));
LOGGER.info("validating : EDGAR -> {} = {}", country.code(Country.CodeType.EDGAR), row.get(17));
assertThat(country.code(Country.CodeType.EDGAR)).isEqualTo(row.get(17));
LOGGER.info("validating : ITU -> {} = {}", country.code(Country.CodeType.ITU), row.get(18));
assertThat(country.code(Country.CodeType.ITU)).isEqualTo(row.get(18));
LOGGER.info("validating : MARC -> {} = {}", country.code(Country.CodeType.MARC), row.get(19));
assertThat(country.code(Country.CodeType.MARC)).isEqualTo(row.get(19));
LOGGER.info("validating : WMO -> {} = {}", country.code(Country.CodeType.WMO), row.get(20));
assertThat(country.code(Country.CodeType.WMO)).isEqualTo(row.get(20));
LOGGER.info("validating : DS -> {} = {}", country.code(Country.CodeType.DS), row.get(21));
assertThat(country.code(Country.CodeType.DS)).isEqualTo(row.get(21));
LOGGER.info("validating : FIFA -> {} = {}", country.code(Country.CodeType.FIFA), row.get(22));
assertThat(country.code(Country.CodeType.FIFA)).isEqualTo(row.get(22));
LOGGER.info("validating : FIPS -> {} = {}", country.code(Country.CodeType.FIPS), row.get(23));
assertThat(country.code(Country.CodeType.FIPS)).isEqualTo(row.get(23));
LOGGER.info("validating : IOC -> {} = {}", country.code(Country.CodeType.IOC), row.get(24));
assertThat(country.code(Country.CodeType.IOC)).isEqualTo(row.get(24));
LOGGER.info("validating : IOC -> {} = {}", country.code(Country.CodeType.GAUL), row.get(25));
assertThat(country.code(Country.CodeType.GAUL)).isEqualTo(row.get(25));
LOGGER.info("validating : languages -> {} = {}", country.languages(), row.get(27));
assertThat(country.languages()).containsAll(Converter.toList(Arrays.asList(row.get(27).replaceAll("\"","").split(",")), String.class));
if(row.size() > 28) {
LOGGER.info("validating : languageCodes -> {} = {}", country.languageCodes(), row.get(28));
assertThat(country.languageCodes()).containsAll(
Converter.toList(Arrays.asList(row.get(28).replaceAll("\"", "").split(",")), String.class));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment