国家/地区代码对照表
ISO 3166-1 国家/地区代码:Alpha-2、Alpha-3、数字码与电话区号对照,覆盖中国及主要国家与地区。
原理解析
ISO 3166 为国家和地区分配标准代码:两位字母(如 CN、US)、三位字母(CHN、USA)和三位数字(156、840)。它们在数据交换中比中文/英文全称更稳定、更短。
两位代码用于国际域名后缀(.cn/.us,即 ccTLD)、电话国际区号前缀、物流与海关申报。注意它与电话区号、货币代码是三套独立体系,不能混用。
什么时候该查这张表
这张表在你要把国家名、二字母代码、三字母代码和数字代码互转时有用。这四套标识在现实系统中同时存在:ISO 3166-1 alpha-2 用于域名与代码,alpha-3 用于数据库与统计,numeric 用于国旗 emoji 与遗留系统。选错套会静默失败——同样是 "CN",写错成数字代码 156 不会被任何校验拦住。
不该查的情况:你在做地理分区判断。「国家」「地区」「大陆」不是一回事:ISO 把中国列为 CN,但台湾、香港、澳门在 ISO 中各有独立条目;欧盟成员国不等于欧洲。若业务逻辑需要这种区分,本表不提供,标准做法是使用成熟的地区数据集。
判断标准:接口约定用 alpha-2(最短、通用),数据存储与交换用 alpha-3(更少冲突),国旗与展示用 numeric 或 emoji。关键是不要在同一系统里混用两套而不记录映射。
特别注意:alpha-2 代码与顶级域名不完全一致,且历史上有过变更(如 ZR 对应刚果金,DD 对应东德)。这些遗留代码在老系统中仍然存在,处理外部数据时需要兼容而不是纠正。
边界与常见陷阱
同名不同码:代码必须以 ISO 为准而非名称
存在多组同为国家名、不同代码的条目,也存在代码相同而官方名变化的情况(如 Turkey 的官方名 Türkiye、Czechia 的历史名 Czech Republic)。以名称做主键的国家列表在改版后必然对不上;以代码为键则稳定。存名称时把 ISO 官方英文名作为快照字段另存,不要用它做主键。
国旗 emoji 的 regional indicator 只认 alpha-2
把两个 ISO 3166-1 alpha-2 码位拼起来即可得到国旗 emoji(U+1F1E6 起为 A)。用 alpha-3 或数字代码无法生成,常见做法是先用数字代码经 String.fromCodePoint(127397 + n) 转为 alpha-2 再拼接。另一个坑是国旗在 Windows 上可能整体渲染成两个字母,这是平台字体缺失,不是编码错误。
ISO 3166-1 与 UN M49 不是同一套数字
统计与人口数据常用 UN M49,其区域与次区域代码与 ISO 3166-1 数字代码大体对应但用途不同,且 M49 另有 Area/Territory 层级。混用两套数字会在跨境数据聚合时产生看似合理实则错位的分组。接口设计时应明确声明用的是哪一套,并在字段名中标注。
与相邻内容的分工
要查货币代码(ISO 4217),用站内「货币代码」页;货币与国家代码有关联但不是一回事,不能互相替代。
要查语言代码(ISO 639 / BCP 47),用站内「语言代码」页;国家不等于语言,一国多语言很常见。
要判断国旗、时区、拨号码等与地区相关的属性,应使用专门数据集,本表只覆盖 ISO 3166-1 的三套代码。
若目的是把国家名做下拉选择或搜索,需要多语言名称数据集,本表的单一官方名不足以支撑。
实战片段
要点:① 国旗 emoji 只能由 alpha-2 生成,数字代码须先经 127397 + n 转成字母;② Windows 可能把国旗渲染成两个字母,这是平台字体缺失而非编码错误,生产环境建议用 SVG 资源而非依赖 emoji 字体;③ 下拉与存储的主键必须用代码而非国家名,官方名会变(Türkiye、Czechia),以名为键的列表在 ISO 改版后必然对不上。
// 数字代码 → alpha-2 → 国旗 emoji
function numericToAlpha2(numeric: number): string {
// UN M49 / ISO 3166-1 numeric 转 alpha-2:127397 是 'A' 的 regional indicator 码位
return String.fromCodePoint(127397 + numeric)
}
function flagOf(alpha2: string): string {
if (alpha2.length !== 2) throw new Error('flag needs alpha-2')
const base = 0x1f1e6 // 'A' 的 regional indicator
return String.fromCodePoint(
base + (alpha2.toUpperCase().charCodeAt(0) - 65),
base + (alpha2.toUpperCase().charCodeAt(1) - 65),
)
}
console.log(numericToAlpha2(156)) // CN
console.log(flagOf('cn')) // 🇨🇳
console.log(flagOf('de'), flagOf('jp')) // 🇩🇪 🇯🇵
// ⚠ Windows 上可能渲染成 "CN" 两个字母 —— 平台字体缺失,不是编码错误
// 生产环境应改用 <img src=".../cn.svg">,避免依赖 emoji 字体
// 下拉框的稳定主键:用 alpha-2,不要用国家名(会随 ISO 改版变化)
const options = [
{ code: 'CN', name: 'China' },
{ code: 'DE', name: 'Germany' },
]实践注解
- ISO 3166-1 有 alpha-2、alpha-3、数字三套并存中国是 CN / CHN / 156。混用会出错(CH 是瑞士不是中国,CN 与 CHN 不能互换)。系统内部只选一套作为规范,其它形态在边界处转换,否则筛选取交集会静默丢数据。
- 「国家」与「地区」在数据模型上是同一种实体ISO 3166-1 里既有主权国家也有属地(如 HK、TW 作为地区代码)。业务表若叫 country 却要装地区,字段命名与文档需说明口径,避免统计口径争议。
- 电话区号与国家代码不是一回事+1 覆盖美国、加拿大与多个加勒比地区,+7 覆盖俄罗斯与哈萨克斯坦。用「国家代码 → 区号」做一对一映射一定出错,电话号码解析应使用 libphonenumber 这类带元数据的库。
数据来源
- ISO 3166-1 (alpha-2 / alpha-3 / numeric)
- ITU-T E.164
上述编号、名称与定义均来自公开规范,本站不主张对规范数据本身的独创性;本页的编排方式、中文释义与实践注解由本站撰写。
| 国家/地区 | Alpha-2 | Alpha-3 | 数字码 | 电话区号 |
|---|---|---|---|---|
| 中国 | CN | CHN | 156 | +86 |
| 中国香港 | HK | HKG | 344 | +852 |
| 中国澳门 | MO | MAC | 446 | +853 |
| 中国台湾 | TW | TWN | 158 | +886 |
| 美国 | US | USA | 840 | +1 |
| 英国 | GB | GBR | 826 | +44 |
| 日本 | JP | JPN | 392 | +81 |
| 韩国 | KR | KOR | 410 | +82 |
| 德国 | DE | DEU | 276 | +49 |
| 法国 | FR | FRA | 250 | +33 |
| 俄罗斯 | RU | RUS | 643 | +7 |
| 加拿大 | CA | CAN | 124 | +1 |
| 澳大利亚 | AU | AUS | 036 | +61 |
| 巴西 | BR | BRA | 076 | +55 |
| 印度 | IN | IND | 356 | +91 |
| 意大利 | IT | ITA | 380 | +39 |
| 西班牙 | ES | ESP | 724 | +34 |
| 荷兰 | NL | NLD | 528 | +31 |
| 新加坡 | SG | SGP | 702 | +65 |
| 瑞士 | CH | CHE | 756 | +41 |
常见问题
ISO 3166-1 的 Alpha-2 和 Alpha-3 有什么区别?
两者都是国家/地区的两字母与三字母代码,指向同一实体。Alpha-2(如 CN)更短、常用于域名后缀与数据交换;Alpha-3(如 CHN)可读性更好、不易与地区缩写混淆。数字码(如 156)与字母无关,适合不用拉丁字母的系统。
电话区号前面的 + 是什么?
"+" 表示国际接入前缀,后接国家代码(如 +86)。实际拨打时 "+" 会被替换成本地国际前缀(中国为 00,美国为 011),例如 +86 138... 从中国境外拨为 0086 138...。
为什么美国和加拿大都用 +1?
北美号码计划(NANP)把美国、加拿大及部分加勒比地区统一编入 +1 区,区号内再用三位地区码区分。所以电话区号 +1 是共享的,不能唯一确定国家。
字母码或数字码会变吗?
极少变化,但确有先例:例如前南斯拉夫解体后新增多个国家代码,苏丹拆分出南苏丹。正式清单由 ISO 维护,必要时以最新版为准。