Info on ISO 3166.
This package contains info on ISO 3166. The purpose of ISO 3166 is to define internationally recognized codes that we can use when we refer to countries and their subdivisions.
ISO 3166 includes three parts:
US
USA
United States of America
)US-CA
for
California
in US
USA
United States of America
)BUMM
to refer
to when BU
BUR
Burma
revised its name to MM
MMR
Myanmar
in 1989)While the information in ISO 3166 is well known and freely available through for example WikiPedia, it is not freely available in a machine readable format from ISO. That’s where this project comes in: it scrapes WikiPedia.
ISO 3166 is closely tied to the work of the United Nations: the names for countries stem from the UN and ISO 3166 maps to numerical UN M49 codes and vice versa. UN M49 also includes information on bigger regions between our earth and countries.
This project includes all three parts of ISO 3166 as separate exports:
iso31661
— countries: list of assigned ISO 3166-1 entriesiso31662
— subdivisions: list of ISO 3166-2 entriesiso31663
— revisions: list of ISO 3166-3 entriesAdditionally, a list of reserved ISO 3166-1 entries is available:
iso31661Reserved
— list of reserved ISO 3166-1 entriesFinally, indexes are available to map between different codes:
iso31661Alpha2ToAlpha3
— map ISO 3166-1 alpha-2 codes to ISO 3166-1 alpha-3 codesiso31661Alpha2ToNumeric
— map ISO 3166-1 alpha-2 codes to ISO 3166-1 numeric (UN M49) codesiso31661Alpha3ToAlpha2
— map ISO 3166-1 alpha-3 codes to ISO 3166-1 alpha-2 codesiso31661NumericToAlpha2
— map ISO 3166-1 numeric (UN M49) codes to ISO 3166-1 alpha-2 codesYou can use this package any time you have to deal with countries and subdivisions or ISO 3166 in particular. The alphabetical codes from ISO 3166 are more useful to humans, but the numerical codes from UN M49 are more resilient to changes. UN M49 also encodes regions bigger than countries, such as (sub)contintents.
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | AA | AB | AD | AE | AF | AG | AH | AI | AJ | AK | AL | AM | AO | AQ | AR | AS | AT | AU | AV | AW | AX | AY | AZ | |||
B | BA | BB | BC | BD | BE | BF | BG | BH | BI | BJ | BK | BL | BM | BN | BO | BP | BQ | BR | BS | BT | BV | BW | BY | BZ | ||
C | CA | CB | CC | CD | CE | CF | CG | CH | CI | CJ | CK | CL | CM | CN | CO | CR | CU | CV | CW | CX | CY | CZ | ||||
D | DA | DB | DC | DE | DF | DH | DI | DJ | DK | DL | DM | DN | DO | DP | DQ | DR | DS | DT | DU | DV | DW | DX | DZ | |||
E | EB | EC | ED | EE | EG | EH | EI | EJ | EK | EL | EN | EO | EQ | ER | ES | ET | EX | EY | ||||||||
F | FA | FB | FC | FD | FE | FF | FG | FH | FI | FJ | FK | FM | FN | FO | FP | FR | FS | FT | FU | FV | FW | FY | FZ | |||
G | GA | GB | GD | GE | GF | GG | GH | GI | GJ | GK | GL | GM | GN | GO | GP | GQ | GR | GS | GT | GU | GV | GW | GX | GY | GZ | |
H | HA | HB | HC | HD | HE | HF | HG | HH | HI | HJ | HK | HL | HM | HN | HO | HP | HQ | HR | HS | HT | HU | HW | HX | HY | HZ | |
I | IA | ID | IE | IF | IG | IH | II | IJ | IK | IL | IM | IN | IO | IP | IQ | IR | IS | IT | IU | IV | IW | IX | IY | IZ | ||
J | JB | JC | JD | JE | JF | JG | JH | JI | JJ | JK | JL | JM | JN | JO | JP | JQ | JR | JS | JU | JV | JW | JX | JY | JZ | ||
K | KA | KB | KC | KD | KE | KF | KG | KH | KI | KJ | KK | KL | KM | KN | KO | KP | KQ | KR | KS | KT | KU | KV | KW | KX | KY | KZ |
L | LA | LB | LC | LD | LE | LG | LH | LI | LJ | LK | LL | LM | LN | LO | LP | LQ | LR | LS | LT | LU | LV | LW | LX | LY | LZ | |
M | MA | MB | MC | MD | ME | MF | MG | MH | MJ | MK | ML | MM | MN | MO | MP | MQ | MR | MS | MT | MU | MV | MW | MX | MY | MZ | |
N | NA | NB | NC | ND | NE | NF | NG | NI | NJ | NK | NL | NM | NN | NO | NP | NR | NS | NU | NV | NW | NX | NY | NZ | |||
O | OB | OC | OD | OE | OF | OG | OH | OI | OJ | OK | OL | OM | ON | OO | OP | OQ | OR | OS | OT | OU | OV | OW | OX | OY | OZ | |
P | PA | PB | PD | PE | PF | PG | PH | PJ | PK | PL | PM | PN | PO | PP | PQ | PR | PS | PT | PV | PW | PX | PY | ||||
Q | QA | QB | QC | QD | QE | QF | QG | QH | QI | QJ | QK | QL | QM | QN | QO | QP | QR | QS | QT | QU | QV | QW | QX | QY | QZ | |
R | RD | RE | RF | RG | RJ | RK | RO | RQ | RR | RS | RT | RU | RV | RW | RX | RY | RZ | |||||||||
S | SA | SB | SC | SD | SE | SG | SH | SI | SJ | SK | SL | SM | SN | SO | SP | SQ | SR | SS | ST | SV | SW | SX | SY | SZ | ||
T | TB | TC | TD | TE | TF | TG | TH | TI | TJ | TK | TL | TM | TN | TO | TQ | TR | TS | TT | TU | TV | TW | TX | TY | TZ | ||
U | UA | UB | UC | UD | UE | UF | UG | UH | UI | UJ | UL | UM | UO | UP | UQ | UR | US | UT | UU | UV | UW | UX | UY | UZ | ||
V | VA | VB | VC | VE | VF | VG | VH | VI | VJ | VK | VL | VM | VN | VO | VP | VQ | VR | VS | VT | VU | VV | VW | VX | VY | VZ | |
W | WA | WB | WC | WD | WE | WF | WH | WI | WJ | WM | WN | WP | WQ | WR | WS | WT | WU | WW | WX | WY | WZ | |||||
X | XA | XB | XC | XD | XE | XF | XG | XH | XI | XJ | XK | XL | XM | XN | XO | XP | XQ | XR | XS | XT | XU | XV | XW | XX | XY | XZ |
Y | YA | YB | YC | YE | YF | YG | YH | YI | YJ | YK | YL | YM | YN | YO | YP | YQ | YR | YS | YT | YW | YX | YY | YZ | |||
Z | ZA | ZB | ZC | ZD | ZE | ZF | ZG | ZH | ZI | ZJ | ZK | ZL | ZM | ZN | ZO | ZP | ZQ | ZS | ZT | ZU | ZV | ZW | ZX | ZY | ZZ |
This package is ESM only. In Node.js (version 14.14+, 16.0+), install with npm:
npm install iso-3166
In Deno with esm.sh
:
import * as iso3166 from 'https://esm.sh/iso-3166@4'
In browsers with esm.sh
:
<script type="module">
import * as iso3166 from 'https://esm.sh/iso-3166@4?bundle'
</script>
See examples below.
This package exports the identifiers iso31661
, iso31661Alpha2ToAlpha3
,
iso31661Alpha2ToNumeric
, iso31661Alpha3ToAlpha2
, iso31661NumericToAlpha2
,
iso31661Reserved
, iso31662
, iso31663
.
There is no default export.
iso31661
List of assigned ISO 3166-1 countries (Array<ISO31661Entry>
).
import {iso31661} from 'iso-3166'
console.log(iso31661)
Yields:
[
{state: 'assigned', alpha2: 'AD', alpha3: 'AND', numeric: '020', name: 'Andorra'},
{state: 'assigned', alpha2: 'AE', alpha3: 'ARE', numeric: '784', name: 'United Arab Emirates'},
{state: 'assigned', alpha2: 'AF', alpha3: 'AFG', numeric: '004', name: 'Afghanistan'},
{state: 'assigned', alpha2: 'AG', alpha3: 'ATG', numeric: '028', name: 'Antigua and Barbuda'},
{state: 'assigned', alpha2: 'AI', alpha3: 'AIA', numeric: '660', name: 'Anguilla'},
// …
]
iso31661Reserved
List of reserved ISO 3166-1 countries (Array<ISO31661Entry>
).
import {iso31661Reserved} from 'iso-3166'
console.log(iso31661Reserved)
Yields:
[
{state: 'exceptionally-reserved', alpha2: 'AC', name: 'Ascension Island'},
{state: 'transitionally-reserved', alpha2: 'AN', name: 'Netherlands Antilles'},
{state: 'indeterminately-reserved', alpha2: 'AP', name: 'African Regional Industrial Property Organization'},
{state: 'transitionally-reserved', alpha2: 'BU', name: 'Burma'},
{state: 'indeterminately-reserved', alpha2: 'BX', name: 'Benelux Trademarks and Designs Office'},
// …
]
iso31662
List of ISO 3166-2 subdivisions (Array<ISO31662Entry>
).
import {iso31662} from 'iso-3166'
console.log(iso31662)
Yields:
[
{code: 'AD-02', name: 'Canillo', parent: 'AD'},
{code: 'AD-03', name: 'Encamp', parent: 'AD'},
// …
{code: 'BD-01', name: 'Bandarban', parent: 'BD-B'},
{code: 'BD-02', name: 'Barguna', parent: 'BD-A'},
// …
{code: 'BD-A', name: 'Barisal', parent: 'BD'},
{code: 'BD-B', name: 'Chittagong', parent: 'BD'},
// …
]
iso31663
List of ISO 3166-3 changes (Array<ISO31663Entry>
).
import {iso31663} from 'iso-3166'
console.log(iso31663)
Yields:
[
{
alpha4: 'AIDJ',
type: 'change',
from: {state: 'formerly-assigned', alpha2: 'AI', alpha3: 'AFI', numeric: '262', name: 'French Afars and Issas'},
to: [
{state: 'assigned', alpha2: 'DJ', alpha3: 'DJI', numeric: '262', name: 'Djibouti'}
]
},
{
alpha4: 'ANHH',
type: 'split',
from: {state: 'formerly-assigned', alpha2: 'AN', alpha3: 'ANT', numeric: '530', name: 'Netherlands Antilles'},
to: [
{state: 'assigned', alpha2: 'BQ', alpha3: 'BES', numeric: '535', name: 'Bonaire, Sint Eustatius and Saba'},
{state: 'assigned', alpha2: 'CW', alpha3: 'CUW', numeric: '531', name: 'Curaçao'},
{state: 'assigned', alpha2: 'SX', alpha3: 'SXM', numeric: '534', name: 'Sint Maarten (Dutch part)'}
]
},
{
alpha4: 'BQAQ',
type: 'merge',
from: {state: 'formerly-assigned', alpha2: 'BQ', alpha3: 'ATB', name: 'British Antarctic Territory'},
to: [
{state: 'assigned', alpha2: 'AQ', alpha3: 'ATA', numeric: '010', name: 'Antarctica'}
]
},
// …
]
ISO31661Entry
Object representing a country.
state
(State
)
— state (example: 'assigned'
)alpha2
(string
)
— ISO 3166-1 alpha-2 code (example: 'GB'
)alpha3
(string?
)
— ISO 3166-1 alpha-3 code (example: 'GBR'
)numeric
(string?
)
— ISO 3166-1 numeric (UN M49) code (example: '826'
)name
(string?
)
— name (example: 'United Kingdom of Great Britain and Northern Ireland'
)Based on the state of the entry, fields may be available.
Assigned entries have all fields.
Reserved entries have alpha2
and name
fields.
State
string
, one of the following:
'assigned'
— currently assigned
(example: VA
VAT
Holy See
)'indeterminately-reserved'
— reserved as other coding systems use them
(example: FL
was used on some car vehicle distinguishing signs from LI
LIE
Liechtenstein
before 1949)'exceptionally-reserved'
— reserved by a national ISO member body
(example: UK
is reserved by United Kingdom
)'transitionally-reserved'
— reserved for a while after removing a country
(example: BU
Burma
as it changed names to MM
MMR
Myanmar
in 1989)'formerly-assigned'
— codes that were previously in use but are no longer strictly reserved
(example: PZ
Panama Canal Zone
, which was a US
USA
United States of America
controlled area until 1979)Many ISO 3166-1 entries are assigned and therefore have a state
of
'assigned'
.
Some ISO 3166-1 entries are not assigned but still have some data attached to them.
ISO 3166-1 also has a concept of “user-assigned” codes, which can be used by
users (like you) to represent things not in ISO 3166 (example: XZ
represents
international waters in UN/LOCODE).
The user-assigned codes are:
AA
, QM
to QZ
, XA
to XZ
, and ZZ
AAA
to AAZ
, QMA
to QZZ
, XAA
to XZZ
, and ZZA
to ZZZ
900
to 999
User-assigned codes will not be used by ISO 3166 and are not exposed by this package.
All other codes are unassigned and may be used by ISO 3166 in the future.
Unassigned codes are not exposed by this package.
ISO31662Entry
Object representing a subdivision of a country.
code
(string
)
— ISO 3166-2 code (example: GB-BFS
)name
(string
)
— name (example: 'Belfast'
)parent
(string
)
— ISO 3166-1 alpha-2 code or ISO 3166-2 code (example: 'GB'
)The code
field always has the format of an ISO 3166 alpha-2 code, followed by
a hyphen minus (-
), and one, two, or three upper alphabetical or numerical
characters.
The latter part of the code is not unique: ID-RI
is the Riau province of
Indonesia and NG-RI
is the Rivers province in Nigeria.
The parent
field can be either the ISO 3166-1 alpha-2 of a country, or another
ISO 3166-2 code of a subdivision.
The latter is true for BE-WNA
Namur
, whose parent is BE-WAL
Waals Gewest
, whose parent in turn is BE
BEL
Belgium
.
To get the country a subdivision is a part of, do something like
code.slice(0, 2)
to get the ISO 3166-1 alpha-2 code from an ISO 3166-2 code.
ISO31663Entry
Object representing a change to a country.
alpha4
(string
)
— ISO 3166-3 alpha-4 code (example: ANHH
)type
(Type
)
— type of revision (example: 'split'
)from
(ISO31661Entry
)
— country before revisionto
(ISO31661Entry[]
)
— list of countries after revisionThe entries in from
and to
may not match current ISO 3166-1 entries.
For example, CSHH
represents the split of CS
CSK
Czechoslovakia
to
CZ
CZE
Czech Republic
and SK
SVK
Slovakia
, but the former now uses
CZ
CZE
Czechia
.
Another example, YUCS
represents the change of YU
YUG
Yugoslavia
to
CS
SCG
Serbia and Montenegro
, but the latter later split with CSXX
to ME
MNE
Montenegro
and RS
SRB
Serbia
.
Type
string
, one of the following:
'merge'
— revision where one country merged with others
(example: DDDE
represents the merger from DD
DDR
German Democratic Republic
to form DE
DEU
Germany
in 1990)'change'
— significant name revision
(example: BYAA
represents the name change from BY
BYS
Byelorussian SSR
to BY
BLR
Belarus
in 1992)'split'
— revision where one country split into others
(example: NTHH
represents the division of NT
NTZ
Neutral Zone
to
IQ
IRQ
Iraq
and SA
SAU
Saudi Arabia
in 1993)This package is fully typed with TypeScript.
It exports the additional types ISO31661Entry
, ISO31661AssignedEntry
,
ISO31661ReservedEntry
, ISO31662Entry
, ISO31663Entry
, State
, and Type
.
This package is at least compatible with all maintained versions of Node.js. As of now, that is Node.js 14.14+ and 16.0+. It also works in Deno and modern browsers.
This package is safe.
wooorm/bcp-47
— parse and stringify BCP 47 language tagswooorm/bcp-47-normalize
— normalize, canonicalize, and format BCP 47 tagswooorm/bcp-47-match
— match BCP 47 language tags with language ranges per RFC 4647wooorm/iso-639-2
— ISO 639-2 codeswooorm/iso-639-3
— ISO 639-3 codeswooorm/iso-15924
— ISO 15924 codeswooorm/un-m49
— UN M49 codesYes please! See How to Contribute to Open Source.