每位为欧洲客户构建地址表单的开发者都迟早会发现一个事实:根本不存在「欧洲邮政编码格式」。每个国家都有自己的规则,而这些差异是真实存在且有实际意义的。本文是覆盖EU-27成员国及主要非欧盟欧洲国家的国别参考指南,包含生产环境所需的regex规则和验证技巧。
整体格局
欧洲邮政编码大致分为四类:
- 5位纯数字:德国、法国、意大利、西班牙、芬兰、克罗地亚、爱沙尼亚、希腊、立陶宛、斯洛伐克。
- 4位纯数字:比利时、保加利亚、匈牙利、奥地利、瑞士、列支敦士登、卢森堡、挪威、斯洛文尼亚、丹麦。
- 固定格式字母数字:荷兰(4位数字加2个字母)、爱尔兰(Eircode,7位字母数字)、马耳他(3个字母加4位数字)。
- 分层字母数字:英国(长度不固定,两段式)。
另有几个特殊情况:瑞典使用第三位后带空格的5位数字(如 123 45),波兰使用第二位后带连字符的5位数字(如 00-001),捷克使用第三位后带空格的5位数字(如 110 00)。
EU-27成员国参考表
| 国家 | ISO | 格式 | 示例 | Regex |
|---|---|---|---|---|
| 奥地利 | AT | 4位数字 | 1010 | ^\d{4}$ |
| 比利时 | BE | 4位数字 | 1000 | ^\d{4}$ |
| 保加利亚 | BG | 4位数字 | 1000 | ^\d{4}$ |
| 克罗地亚 | HR | 5位数字 | 10000 | ^\d{5}$ |
| 塞浦路斯 | CY | 4位数字 | 1010 | ^\d{4}$ |
| 捷克 | CZ | NNN NN | 110 00 | ^\d{3} ?\d{2}$ |
| 丹麦 | DK | 4位数字 | 1050 | ^\d{4}$ |
| 爱沙尼亚 | EE | 5位数字 | 10111 | ^\d{5}$ |
| 芬兰 | FI | 5位数字 | 00100 | ^\d{5}$ |
| 法国 | FR | 5位数字 | 75008 | ^\d{5}$ |
| 德国 | DE | 5位数字 | 10115 | ^\d{5}$ |
| 希腊 | GR | NNN NN | 105 63 | ^\d{3} ?\d{2}$ |
| 匈牙利 | HU | 4位数字 | 1051 | ^\d{4}$ |
| 爱尔兰 | IE | Eircode | D02 X285 | ^[A-Z]\d{2} ?[A-Z0-9]{4}$ |
| 意大利 | IT | 5位数字 | 00184 | ^\d{5}$ |
| 拉脱维亚 | LV | LV-NNNN | LV-1050 | ^LV-\d{4}$ |
| 立陶宛 | LT | LT-NNNNN | LT-01100 | ^LT-\d{5}$ |
| 卢森堡 | LU | 4位数字 | 1234 | ^\d{4}$ |
| 马耳他 | MT | LLL NNNN | VLT 1234 | ^[A-Z]{3} ?\d{4}$ |
| 荷兰 | NL | NNNN LL | 1011 AB | ^\d{4} ?[A-Z]{2}$ |
| 波兰 | PL | NN-NNN | 00-001 | ^\d{2}-\d{3}$ |
| 葡萄牙 | PT | NNNN-NNN | 1000-001 | ^\d{4}-\d{3}$ |
| 罗马尼亚 | RO | 6位数字 | 010001 | ^\d{6}$ |
| 斯洛伐克 | SK | NNN NN | 811 01 | ^\d{3} ?\d{2}$ |
| 斯洛文尼亚 | SI | 4位数字 | 1000 | ^\d{4}$ |
| 西班牙 | ES | 5位数字 | 28013 | ^\d{5}$ |
| 瑞典 | SE | NNN NN | 111 22 | ^\d{3} ?\d{2}$ |
主要非欧盟欧洲国家
| 国家 | ISO | 格式 | 示例 | Regex |
|---|---|---|---|---|
| 英国 | GB | 分层格式 | SW1A 1AA | ^[A-Z]{1,2}\d[A-Z\d]? ?\d[A-Z]{2}$ |
| 瑞士 | CH | 4位数字 | 8001 | ^\d{4}$ |
| 挪威 | NO | 4位数字 | 0150 | ^\d{4}$ |
| 冰岛 | IS | 3位数字 | 101 | ^\d{3}$ |
| 列支敦士登 | LI | 4位数字 | 9490 | ^\d{4}$ |
英国邮政编码详解
英国系统是欧洲信息密度最高的邮政编码体系。以 SW1A 1AA 为例,可以分解为:
SW:邮政区域(伦敦西南)SW1A:邮政区(圣詹姆斯和皮姆利科)SW1A 1:邮政扇区(几条街道范围)SW1A 1AA:邮政单元(具体投递点,通常是单栋建筑)
这种层级结构意味着英国邮政编码可以精确定位到一栋建筑,这就是为什么英国产品经常将邮政编码用作街区甚至街道级别分组的代理。几乎没有其他国家的邮政编码系统能做到这一点。
生产验证方案
生产环境中最简洁的方案是维护一张如上所示的国别regex表,根据地址中的国家代码选择对应规则。国家代码可以来自:
- 用户明确选择的下拉框
- 用户的IP地理位置
- 地理编码结果(大多数生产地理编码器会规范化邮政编码并在响应中包含国家代码)
避免在不知道国家的情况下验证邮政编码。4位数字在12个国家是合法的,在更多国家则无效。
对于高风险流程(结账、KYC、受监管行业),不要止步于regex验证。将地址发送给地理编码器,将「rooftop」或「street」精度的响应作为验证通过的标准,而非仅依靠regex匹配。格式正确的邮政编码仍然可能无法匹配真实地址。
存储与规范化
将邮政编码以字符串形式存储,而非数字。前导零很重要(01100 是合法的立陶宛编码,1100 则不是)。存储格式规范:
- 跨数据集比较时去除非字母数字字符进行规范化。
- 输出时按国家规范形式显示(含连字符、空格、前缀)。
- 始终将国家代码与邮政编码一同存储,即使你的产品今天只在一个国家运营。这样的schema在多国扩展时无需数据迁移。
MapAtlas的支持
MapAtlas的Geocoding API为每个支持的国家返回经过验证的规范化 address_components.postal_code 字段,数据来自源数据校验。Search API接受邮政编码作为搜索输入并返回匹配地点。两个API均采用欧盟托管、GDPR合规,基于OSM级数据并配备各国专属的地址解析器。
如需深入了解地址转换为坐标的过程,请参阅什么是地理编码。了解每次坐标响应背后的经纬度机制,请参阅经度与纬度。
常见问题
欧洲邮政编码的格式是什么?
欧洲没有统一的邮政编码格式,每个国家自行定义。大多数使用固定长度的数字编码(德国、法国、意大利、西班牙5位;比利时、匈牙利、奥地利、瑞士4位),但也有若干国家使用字母数字混合格式(荷兰使用4位数字加2个字母,英国使用复杂的两段式字母数字系统,爱尔兰使用7位字母数字的Eircode)。一个可用的地址验证器必须为EU-27成员国及主要非欧盟欧洲国家分别维护一套格式规则。
德国邮政编码(Postleitzahl)和波兰邮政编码相同吗?
两者都是5个字符,但结构不同。德国使用5位连续数字(如10115),波兰使用2位数字、一个连字符、再加3位数字(如00-001)。存储时可以保留波兰格式的连字符,德国格式则不含连字符。跨数据集匹配时,先去除非字母数字字符进行规范化,再在输出时按各国格式重新添加分隔符。
如何验证来自任意欧盟国家的邮政编码?
首先确定国家(从地址、ISO 3166-1 alpha-2国家代码或用户地理位置获取),然后应用该国的regex规则。国家感知验证是标准生产模式,因为单一的全局regex要么会拒绝合法编码,要么会接受明显无效的编码。MapAtlas Geocoding API在其 address_components 中返回每个国家的规范化邮政编码,通常可以直接让地理编码器完成验证步骤。
英国邮政编码系统为何与众不同?
英国邮政编码采用分层字母数字系统,在两个部分中编码了邮政区域、邮政区、邮政扇区和邮政单元(如白金汉宫的SW1A 1AA)。它每个编码包含的空间信息比大多数国家系统更多,这就是为什么英国邮政编码有时被用作街区甚至街道的代理。该系统设计于20世纪五六十年代,此后一直被改造融入现代数据基础设施。

