ibankit
Version:
Validation, field extraction and creation of IBAN, BBAN, BIC numbers
546 lines (538 loc) • 15.2 kB
text/typescript
/**
* Country Code Enum
*
* <a href="http://en.wikipedia.org/wiki/ISO_3166-1">ISO 3166-1</a> country code.
*/
export enum CountryCode {
AD = "AD",
AE = "AE",
AF = "AF",
AG = "AG",
AI = "AI",
AL = "AL",
AM = "AM",
AO = "AO",
AQ = "AQ",
AR = "AR",
AS = "AS",
AT = "AT",
AU = "AU",
AW = "AW",
AX = "AX",
AZ = "AZ",
BA = "BA",
BB = "BB",
BD = "BD",
BE = "BE",
BF = "BF",
BG = "BG",
BH = "BH",
BI = "BI",
BJ = "BJ",
BL = "BL",
BM = "BM",
BN = "BN",
BO = "BO",
BQ = "BQ",
BR = "BR",
BS = "BS",
BT = "BT",
BV = "BV",
BW = "BW",
BY = "BY",
BZ = "BZ",
CA = "CA",
CC = "CC",
CD = "CD",
CF = "CF",
CG = "CG",
CH = "CH",
CI = "CI",
CK = "CK",
CL = "CL",
CM = "CM",
CN = "CN",
CO = "CO",
CR = "CR",
CU = "CU",
CV = "CV",
CW = "CW",
CX = "CX",
CY = "CY",
CZ = "CZ",
DE = "DE",
DJ = "DJ",
DK = "DK",
DM = "DM",
DO = "DO",
DZ = "DZ",
EC = "EC",
EE = "EE",
EG = "EG",
EH = "EH",
ER = "ER",
ES = "ES",
ET = "ET",
FI = "FI",
FJ = "FJ",
FK = "FK",
FM = "FM",
FO = "FO",
FR = "FR",
GA = "GA",
GB = "GB",
GD = "GD",
GE = "GE",
GF = "GF",
GG = "GG",
GH = "GH",
GI = "GI",
GL = "GL",
GM = "GM",
GN = "GN",
GP = "GP",
GQ = "GQ",
GR = "GR",
GS = "GS",
GT = "GT",
GU = "GU",
GW = "GW",
GY = "GY",
HK = "HK",
HM = "HM",
HN = "HN",
HR = "HR",
HT = "HT",
HU = "HU",
ID = "ID",
IE = "IE",
IL = "IL",
IM = "IM",
IN = "IN",
IO = "IO",
IQ = "IQ",
IR = "IR",
IS = "IS",
IT = "IT",
JE = "JE",
JM = "JM",
JO = "JO",
JP = "JP",
KE = "KE",
KG = "KG",
KH = "KH",
KI = "KI",
KM = "KM",
KN = "KN",
KP = "KP",
KR = "KR",
KW = "KW",
KY = "KY",
KZ = "KZ",
LA = "LA",
LB = "LB",
LC = "LC",
LI = "LI",
LK = "LK",
LR = "LR",
LS = "LS",
LT = "LT",
LU = "LU",
LV = "LV",
LY = "LY",
MA = "MA",
MC = "MC",
MD = "MD",
ME = "ME",
MF = "MF",
MG = "MG",
MH = "MH",
MK = "MK",
ML = "ML",
MM = "MM",
MN = "MN",
MO = "MO",
MP = "MP",
MQ = "MQ",
MR = "MR",
MS = "MS",
MT = "MT",
MU = "MU",
MV = "MV",
MW = "MW",
MX = "MX",
MY = "MY",
MZ = "MZ",
NA = "NA",
NC = "NC",
NE = "NE",
NF = "NF",
NG = "NG",
NI = "NI",
NL = "NL",
NO = "NO",
NP = "NP",
NR = "NR",
NU = "NU",
NZ = "NZ",
OM = "OM",
PA = "PA",
PE = "PE",
PF = "PF",
PG = "PG",
PH = "PH",
PK = "PK",
PL = "PL",
PM = "PM",
PN = "PN",
PR = "PR",
PS = "PS",
PT = "PT",
PW = "PW",
PY = "PY",
QA = "QA",
RE = "RE",
RO = "RO",
RS = "RS",
RU = "RU",
RW = "RW",
SA = "SA",
SB = "SB",
SC = "SC",
SD = "SD",
SE = "SE",
SG = "SG",
SH = "SH",
SI = "SI",
SJ = "SJ",
SK = "SK",
SL = "SL",
SM = "SM",
SN = "SN",
SO = "SO",
SR = "SR",
SS = "SS",
ST = "ST",
SV = "SV",
SX = "SX",
SY = "SY",
SZ = "SZ",
TC = "TC",
TD = "TD",
TF = "TF",
TG = "TG",
TH = "TH",
TJ = "TJ",
TK = "TK",
TL = "TL",
TM = "TM",
TN = "TN",
TO = "TO",
TR = "TR",
TT = "TT",
TV = "TV",
TW = "TW",
TZ = "TZ",
UA = "UA",
UG = "UG",
UM = "UM",
US = "US",
UY = "UY",
UZ = "UZ",
VA = "VA",
VC = "VC",
VE = "VE",
VG = "VG",
VI = "VI",
VN = "VN",
VU = "VU",
WF = "WF",
WS = "WS",
XK = "XK",
YE = "YE",
YT = "YT",
ZA = "ZA",
ZM = "ZM",
ZW = "ZW",
}
const countryData: Record<CountryCode, [string, string]> = {
[ ]: ["Andorra", "AND"],
[ ]: ["United Arab Emirates", "ARE"],
[ ]: ["Afghanistan", "AFG"],
[ ]: ["Antigua and Barbuda", "ATG"],
[ ]: ["Anguilla", "AIA"],
[ ]: ["Albania", "ALB"],
[ ]: ["Armenia", "ARM"],
[ ]: ["Angola", "AGO"],
[ ]: ["Antarctica", "ATA"],
[ ]: ["Argentina", "ARG"],
[ ]: ["American Samoa", "ASM"],
[ ]: ["Austria", "AUT"],
[ ]: ["Australia", "AUS"],
[ ]: ["Aruba", "ABW"],
[ ]: ["\u212Bland Islands", "ALA"],
[ ]: ["Azerbaijan", "AZE"],
[ ]: ["Bosnia and Herzegovina", "BIH"],
[ ]: ["Barbados", "BRB"],
[ ]: ["Bangladesh", "BGD"],
[ ]: ["Belgium", "BEL"],
[ ]: ["Burkina Faso", "BFA"],
[ ]: ["Bulgaria", "BGR"],
[ ]: ["Bahrain", "BHR"],
[ ]: ["Burundi", "BDI"],
[ ]: ["Benin", "BEN"],
[ ]: ["Saint Barth\u00E9lemy", "BLM"],
[ ]: ["Bermuda", "BMU"],
[ ]: ["Brunei Darussalam", "BRN"],
[ ]: ["Plurinational State of Bolivia", "BOL"],
[ ]: ["Bonaire, Sint Eustatius and Saba", "BES"],
[ ]: ["Brazil", "BRA"],
[ ]: ["Bahamas", "BHS"],
[ ]: ["Bhutan", "BTN"],
[ ]: ["Bouvet Island", "BVT"],
[ ]: ["Botswana", "BWA"],
[ ]: ["Belarus", "BLR"],
[ ]: ["Belize", "BLZ"],
[ ]: ["Canada", "CAN"],
[ ]: ["Cocos Islands", "CCK"],
[ ]: ["The Democratic Republic of the Congo", "COD"],
[ ]: ["Central African Republic", "CAF"],
[ ]: ["Congo", "COG"],
[ ]: ["Switzerland", "CHE"],
[ ]: ["C\u00F4te d'Ivoire", "CIV"],
[ ]: ["Cook Islands", "COK"],
[ ]: ["Chile", "CHL"],
[ ]: ["Cameroon", "CMR"],
[ ]: ["China", "CHN"],
[ ]: ["Colombia", "COL"],
[ ]: ["Costa Rica", "CRI"],
[ ]: ["Cuba", "CUB"],
[ ]: ["Cape Verde", "CPV"],
[ ]: ["Cura\u00E7ao", "CUW"],
[ ]: ["Christmas Island", "CXR"],
[ ]: ["Cyprus", "CYP"],
[ ]: ["Czech Republic", "CZE"],
[ ]: ["Germany", "DEU"],
[ ]: ["Djibouti", "DJI"],
[ ]: ["Denmark", "DNK"],
[ ]: ["Dominica", "DMA"],
[ ]: ["Dominican Republic", "DOM"],
[ ]: ["Algeria", "DZA"],
[ ]: ["Ecuador", "ECU"],
[ ]: ["Estonia", "EST"],
[ ]: ["Egypt", "EGY"],
[ ]: ["Western Sahara", "ESH"],
[ ]: ["Eritrea", "ERI"],
[ ]: ["Spain", "ESP"],
[ ]: ["Ethiopia", "ETH"],
[ ]: ["Finland", "FIN"],
[ ]: ["Fiji", "FJI"],
[ ]: ["Falkland Islands", "FLK"],
[ ]: ["Federated States of Micronesia", "FSM"],
[ ]: ["Faroe Islands", "FRO"],
[ ]: ["France", "FRA"],
[ ]: ["Gabon", "GAB"],
[ ]: ["United Kingdom", "GBR"],
[ ]: ["Grenada", "GRD"],
[ ]: ["Georgia", "GEO"],
[ ]: ["French Guiana", "GUF"],
[ ]: ["Guemsey", "GGY"],
[ ]: ["Ghana", "GHA"],
[ ]: ["Gibraltar", "GIB"],
[ ]: ["Greenland", "GRL"],
[ ]: ["Gambia", "GMB"],
[ ]: ["Guinea", "GIN"],
[ ]: ["Guadeloupe", "GLP"],
[ ]: ["Equatorial Guinea", "GNQ"],
[ ]: ["Greece", "GRC"],
[ ]: ["South Georgia and the South Sandwich Islands", "SGS"],
[ ]: ["Guatemala", "GTM"],
[ ]: ["Guam", "GUM"],
[ ]: ["Guinea-Bissau", "GNB"],
[ ]: ["Guyana", "GUY"],
[ ]: ["Hong Kong", "HKG"],
[ ]: ["Heard Island and McDonald Islands", "HMD"],
[ ]: ["Honduras", "HND"],
[ ]: ["Croatia", "HRV"],
[ ]: ["Haiti", "HTI"],
[ ]: ["Hungary", "HUN"],
[ ]: ["Indonesia", "IDN"],
[ ]: ["Ireland", "IRL"],
[ ]: ["Israel", "ISR"],
[ ]: ["Isle of Man", "IMN"],
[ ]: ["India", "IND"],
[ ]: ["British Indian Ocean Territory", "IOT"],
[ ]: ["Iraq", "IRQ"],
[ ]: ["Islamic Republic of Iran", "IRN"],
[ ]: ["Iceland", "ISL"],
[ ]: ["Italy", "ITA"],
[ ]: ["Jersey", "JEY"],
[ ]: ["Jamaica", "JAM"],
[ ]: ["Jordan", "JOR"],
[ ]: ["Japan", "JPN"],
[ ]: ["Kenya", "KEN"],
[ ]: ["Kyrgyzstan", "KGZ"],
[ ]: ["Cambodia", "KHM"],
[ ]: ["Kiribati", "KIR"],
[ ]: ["Comoros", "COM"],
[ ]: ["Saint Kitts and Nevis", "KNA"],
[ ]: ["Democratic People's Republic of Korea", "PRK"],
[ ]: ["Republic of Korea", "KOR"],
[ ]: ["Kuwait", "KWT"],
[ ]: ["Cayman Islands", "CYM"],
[ ]: ["Kazakhstan", "KAZ"],
[ ]: ["Lao People's Democratic Republic", "LAO"],
[ ]: ["Lebanon", "LBN"],
[ ]: ["Saint Lucia", "LCA"],
[ ]: ["Liechtenstein", "LIE"],
[ ]: ["Sri Lanka", "LKA"],
[ ]: ["Liberia", "LBR"],
[ ]: ["Lesotho", "LSO"],
[ ]: ["Lithuania", "LTU"],
[ ]: ["Luxembourg", "LUX"],
[ ]: ["Latvia", "LVA"],
[ ]: ["Libya", "LBY"],
[ ]: ["Morocco", "MAR"],
[ ]: ["Monaco", "MCO"],
[ ]: ["Republic of Moldova", "MDA"],
[ ]: ["Montenegro", "MNE"],
[ ]: ["Saint Martin", "MAF"],
[ ]: ["Madagascar", "MDG"],
[ ]: ["Marshall Islands", "MHL"],
[ ]: ["The former Yugoslav Republic of Macedonia", "MKD"],
[ ]: ["Mali", "MLI"],
[ ]: ["Myanmar", "MMR"],
[ ]: ["Mongolia", "MNG"],
[ ]: ["Macao", "MAC"],
[ ]: ["Northern Mariana Islands", "MNP"],
[ ]: ["Martinique", "MTQ"],
[ ]: ["Mauritania", "MRT"],
[ ]: ["Montserrat", "MSR"],
[ ]: ["Malta", "MLT"],
[ ]: ["Mauritius", "MUS"],
[ ]: ["Maldives", "MDV"],
[ ]: ["Malawi", "MWI"],
[ ]: ["Mexico", "MEX"],
[ ]: ["Malaysia", "MYS"],
[ ]: ["Mozambique", "MOZ"],
[ ]: ["Namibia", "NAM"],
[ ]: ["New Caledonia", "NCL"],
[ ]: ["Niger", "NER"],
[ ]: ["Norfolk Island", "NFK"],
[ ]: ["Nigeria", "NGA"],
[ ]: ["Nicaragua", "NIC"],
[ ]: ["Netherlands", "NLD"],
[ ]: ["Norway", "NOR"],
[ ]: ["Nepal", "NPL"],
[ ]: ["Nauru", "NRU"],
[ ]: ["Niue", "NIU"],
[ ]: ["New Zealand", "NZL"],
[ ]: ["Oman", "OMN"],
[ ]: ["Panama", "PAN"],
[ ]: ["Peru", "PER"],
[ ]: ["French Polynesia", "PYF"],
[ ]: ["Papua New Guinea", "PNG"],
[ ]: ["Philippines", "PHL"],
[ ]: ["Pakistan", "PAK"],
[ ]: ["Poland", "POL"],
[ ]: ["Saint Pierre and Miquelon", "SPM"],
[ ]: ["Pitcairn", "PCN"],
[ ]: ["Puerto Rico", "PRI"],
[ ]: ["Occupied Palestinian Territory", "PSE"],
[ ]: ["Portugal", "PRT"],
[ ]: ["Palau", "PLW"],
[ ]: ["Paraguay", "PRY"],
[ ]: ["Qatar", "QAT"],
[ ]: ["R\u00E9union", "REU"],
[ ]: ["Romania", "ROU"],
[ ]: ["Serbia", "SRB"],
[ ]: ["Russian Federation", "RUS"],
[ ]: ["Rwanda", "RWA"],
[ ]: ["Saudi Arabia", "SAU"],
[ ]: ["Solomon Islands", "SLB"],
[ ]: ["Seychelles", "SYC"],
[ ]: ["Sudan", "SDN"],
[ ]: ["Sweden", "SWE"],
[ ]: ["Singapore", "SGP"],
[ ]: ["Saint Helena, Ascension and Tristan da Cunha", "SHN"],
[ ]: ["Slovenia", "SVN"],
[ ]: ["Svalbard and Jan Mayen", "SJM"],
[ ]: ["Slovakia", "SVK"],
[ ]: ["Sierra Leone", "SLE"],
[ ]: ["San Marino", "SMR"],
[ ]: ["Senegal", "SEN"],
[ ]: ["Somalia", "SOM"],
[ ]: ["Suriname", "SUR"],
[ ]: ["South Sudan", "SSD"],
[ ]: ["Sao Tome and Principe", "STP"],
[ ]: ["El Salvador", "SLV"],
[ ]: ["Sint Maarten", "SXM"],
[ ]: ["Syrian Arab Republic", "SYR"],
[ ]: ["Swaziland", "SWZ"],
[ ]: ["Turks and Caicos Islands", "TCA"],
[ ]: ["Chad", "TCD"],
[ ]: ["French Southern Territories", "ATF"],
[ ]: ["Togo", "TGO"],
[ ]: ["Thailand", "THA"],
[ ]: ["Tajikistan", "TJK"],
[ ]: ["Tokelau", "TKL"],
[ ]: ["Timor-Leste", "TLS"],
[ ]: ["Turkmenistan", "TKM"],
[ ]: ["Tunisia", "TUN"],
[ ]: ["Tonga", "TON"],
[ ]: ["Turkey", "TUR"],
[ ]: ["Trinidad and Tobago", "TTO"],
[ ]: ["Tuvalu", "TUV"],
[ ]: ["Taiwan, Province of China", "TWN"],
[ ]: ["United Republic of Tanzania", "TZA"],
[ ]: ["Ukraine", "UKR"],
[ ]: ["Uganda", "UGA"],
[ ]: ["United States Minor Outlying Islands", "UMI"],
[ ]: ["United States", "USA"],
[ ]: ["Uruguay", "URY"],
[ ]: ["Uzbekistan", "UZB"],
[ ]: ["Holy See", "VAT"],
[ ]: ["Saint Vincent and the Grenadines", "VCT"],
[ ]: ["Bolivarian Republic of Venezuela", "VEN"],
[ ]: ["British Virgin Islands", "VGB"],
[ ]: ["Virgin Islands, U.S.", "VIR"],
[ ]: ["Viet Nam", "VNM"],
[ ]: ["Vanuatu", "VUT"],
[ ]: ["Wallis and Futuna", "WLF"],
[ ]: ["Samoa", "WSM"],
[ ]: ["Kosovo", "UNK"],
[ ]: ["Yemen", "YEM"],
[ ]: ["Mayotte", "MYT"],
[ ]: ["South Africa", "ZAF"],
[ ]: ["Zambia", "ZMB"],
[ ]: ["Zimbabwe", "ZWE"],
};
const by2code = Object.entries(countryData).reduce(
(acc, [k, v]) => {
acc[k] = [k as CountryCode, v];
return acc;
},
{} as Record<string, [CountryCode, [string, string]]>,
);
const by3code = Object.entries(countryData).reduce(
(acc, [k, v]) => {
acc[v[1]] = [k as CountryCode, v];
return acc;
},
{} as Record<string, [CountryCode, [string, string]]>,
);
export function countryByCode(code: string): CountryCode | null {
if (code === null) {
return null;
}
let info;
if (code.length === 3) {
info = by3code[code];
} else if (code.length === 2) {
info = by2code[code];
}
if (info) {
return info[0];
}
return null;
}