Have ideas to improve npm?Join in the discussion! »

    iso-3166
    TypeScript icon, indicating that this package has built-in type declarations

    4.0.0 • Public • Published

    iso-3166

    Build Coverage Downloads Size

    ISO 3166 codes in an accessible, machine readable, format.

    Install

    This package is ESM only: Node 12+ is needed to use it and it must be imported instead of required.

    npm:

    npm install iso-3166

    Contents

    Use

    This package exports the following identifiers: iso31661, iso31661Alpha2ToAlpha3, iso31661Alpha2ToNumeric, iso31661Alpha3ToAlpha2, iso31661NumericToAlpha2, iso31661Reserved, iso31662, iso31663. There is no default export.

    Overview

    ISO 3166 is a standard to represent countries and subregions with codes. It includes three parts:

    • ISO 3166-1 defines codes for countries (such as US USA United States of America)
    • ISO 3166-2 defines codes for subdivisions (such as US-CA for California in US USA United States of America)
    • ISO 3166-3 defines codes for former countries (such as 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 available in a freely available 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 entries
    • iso31662 — Subdivisions: list of ISO 3166-2 entries
    • iso31663 — Revisions: list of ISO 3166-3 entries

    Additionally, a list of reserved ISO 3166-1 entries is available:

    Finally, indexes are available to map between different codes:

    Matrix

    ISO 3166-1 alpha-2 code matrix
    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 AC AD AE AF AG AH AI AJ AK AL AM AN AO AP 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 BU BV BW BX BY BZ
    C CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ
    D DA DB DC DD DE DF DG DH DI DJ DK DL DM DN DO DP DQ DR DS DT DU DV DW DX DY DZ
    E EA EB EC ED EE EF EG EH EI EJ EK EL EM EN EO EP EQ ER ES ET EU EV EW EX EY EZ
    F FA FB FC FD FE FF FG FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ
    G GA GB GC 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 HV HW HX HY HZ
    I IA IB IC ID IE IF IG IH II IJ IK IL IM IN IO IP IQ IR IS IT IU IV IW IX IY IZ
    J JA JB JC JD JE JF JG JH JI JJ JK JL JM JN JO JP JQ JR JS JT 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 LF 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 MI 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 NH NI NJ NK NL NM NN NO NP NQ NR NS NT NU NV NW NX NY NZ
    O OA 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 PC PD PE PF PG PH PI PJ PK PL PM PN PO PP PQ PR PS PT PU PV PW PX PY PZ
    Q QA QB QC QD QE QF QG QH QI QJ QK QL QM QN QO QP QQ QR QS QT QU QV QW QX QY QZ
    R RA RB RC RD RE RF RG RH RI RJ RK RL RM RN RO RP RQ RR RS RT RU RV RW RX RY RZ
    S SA SB SC SD SE SF SG SH SI SJ SK SL SM SN SO SP SQ SR SS ST SU SV SW SX SY SZ
    T TA TB TC TD TE TF TG TH TI TJ TK TL TM TN TO TP TQ TR TS TT TU TV TW TX TY TZ
    U UA UB UC UD UE UF UG UH UI UJ UK UL UM UN UO UP UQ UR US UT UU UV UW UX UY UZ
    V VA VB VC VD 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 WG WH WI WJ WK WL WM WN WO WP WQ WR WS WT WU WV 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 YD YE YF YG YH YI YJ YK YL YM YN YO YP YQ YR YS YT YU YV YW YX YY YZ
    Z ZA ZB ZC ZD ZE ZF ZG ZH ZI ZJ ZK ZL ZM ZN ZO ZP ZQ ZR ZS ZT ZU ZV ZW ZX ZY ZZ

    API

    iso31661

    ISO31661Entry[] — Countries: assigned ISO 3166-1 entries.

    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

    ISO31661Entry[]Reserved ISO 3166-1 entries.

    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

    ISO31662Entry[] — Subdivisions: ISO 3166-2 entries.

    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

    ISO31663Entry[] — Changes: ISO 3166-3 entries.

    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 with the following fields:

    • 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 (example: VA VAT Holy See)
    • indeterminately-reserved (example: FL was used on some car vehicle distinguishing signs from LI LIE Liechtenstein before 1949)
    • exceptionally-reserved (example: UK is reserved by United Kingdom)
    • transitionally-reserved (example: BU Burma as it changed names to MM MMR Myanmar in 1989)
    • formerly-assigned (example: PZ Panama Canal Zone, which was a US USA United States of America controlled area until 1979)
    Assigned

    Most ISO 3166-1 entries are assigned, and therefore have a state of 'assigned'.

    Reserved

    Some ISO 3166-1 entries are explicitly unassigned, but still have some data attached to them.

    The following states are used for reserved entries:

    • 'indeterminately-reserved' — Reserved as other coding systems use them
    • 'exceptionally-reserved' — Reserved by a national ISO member body
    • 'transitionally-reserved' — Reserved for a while after removing a country
    • 'formerly-assigned' — Codes that were previously in use (but are no longer strictly reserved)
    User-assigned

    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:

    • ISO 3166-1 alpha-2: AA, QM to QZ, XA to XZ, and ZZ
    • ISO 3166-1 alpha-3: AAA to AAZ, QMA to QZZ, XAA to XZZ, and ZZA to ZZZ
    • ISO 3166-1 numeric: 900 to 999

    User-assigned codes will not be used by ISO 3166.

    Unassigned

    All other codes are unassigned and may be used by ISO 3166 in the future.

    ISO31662Entry

    Object with the following fields:

    • 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')

    code 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.

    parent 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 with the following fields:

    • alpha4 (string) — ISO 3166-3 alpha-4 code (example: ANHH)
    • type (Type) — Type of revision (example: 'split')
    • from (ISO31661Entry) — Country before revision
    • to (ISO31661Entry[]) — List of countries after revision

    The from and to entries 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)

    Related

    License

    MIT © Titus Wormer

    Install

    npm i iso-3166

    DownloadsWeekly Downloads

    860

    Version

    4.0.0

    License

    MIT

    Unpacked Size

    495 kB

    Total Files

    21

    Last publish

    Collaborators

    • avatar