---
title: "E.164手机号格式：转换与校验方法"
description: "E.164手机号格式详解：格式规则、本地号码转换示例表、WhatsApp与短信API的要求、正则表达式和libphonenumber校验方法。"
canonical: "https://omnichannels.ai/zh/blog/e164-phone-number-format/"
language: "zh"
updated: "2026-11-08"
publisher: "BroadNet Technologies"
brand: "OmniChannels.ai"
category: "integration"
primaryQuery: "e164格式"
keywords: ["国际手机号格式", "e.164手机号", "手机号转换为e164", "e164正则校验", "libphonenumber", "excel手机号前导零", "whatsapp手机号格式"]
published: "2026-11-08"
author: "OmniChannels.ai Editorial Team"
reviewer: "BroadNet Messaging Solutions Team"
readingMinutes: 9
answer: "E.164是ITU-T制定的国际电话编号方案。E.164号码以加号开头，后接国家代码和国家内号码，最多15位数字，不含空格或标点，例如+971501234567。转换本地号码时，如果该国使用国内长途前缀（通常是0），就去掉它，再加上加号和国家代码，并删除空格和括号。"
takeaways: ["E.164号码由加号、国家代码和国家内号码组成：总共最多15位数字，不含空格、短横线或括号。", "转换就是去掉国内长途前缀（通常是0），但并非每个国家都有：ITU的拨号程序表中，意大利、西班牙和卡塔尔都没有列出。", "Meta建议WhatsApp发送请求中包含加号和国家拨号代码，因为缺少它们的号码会被加上发送方的国家代码，可能发给错误的人。", "正则表达式只检查号码的形态；而libphonenumber这样的库会检查号码对该国是否有效。", "Excel可能丢掉前导零，并把长号码显示为科学记数法，所以请把手机号列保持为文本格式。"]
faq: 
  - q: "什么是E.164格式？"
    a: "E.164是ITU-T建议书E.164定义的国际电话编号方案。日常使用中，E.164号码是加号、国家代码和只含数字的国家内号码，总共最多15位数字。它能在全球范围内唯一标识一个号码，这就是消息平台和API要求使用它的原因。"
  - q: "如何把手机号转换为E.164？"
    a: "删除空格、短横线和括号。如果该国使用国内长途前缀（通常是开头的0），就去掉它。再加上加号和国家代码。于是阿联酋号码050 123 4567就变成+971501234567。意大利等国的固话号码要保留开头的0，所以请核对该国规则或使用号码库。"
  - q: "E.164号码最多可以有多少位数字？"
    a: "最多15位，包括国家代码和国家内号码，但不含国际呼叫前缀。加号不算数字。许多国家内号码要短得多。超过15位的值不可能是有效的E.164号码，通常说明粘贴出错或电子表格单元格被损坏。"
  - q: "WhatsApp API需要加号吗？"
    a: "Meta的文档称，发送消息请求支持加号、连字符、括号和空格，并强烈建议包含加号和国家拨号代码。没有加号时，发送方的国家拨号代码会被加到号码前，可能把消息发到另一个错误的号码。为稳妥起见，请发送完整的E.164。"
  - q: "为什么Excel会去掉零或改变我的手机号？"
    a: "当手机号以数字形式输入时，Excel把它当作数值。Microsoft的文档说明，这会去掉前导零，并把长号码显示为科学记数法，因为Excel只保持15位精度。请在输入或粘贴号码之前把该列设为文本格式，或在输入内容前加撇号，并重新输入之前键入的号码。"
  - q: "有效的E.164号码也一定能联系上吗？"
    a: "不一定。号码可能格式正确，却是未分配、已停机或已携号转网的。格式校验检查的是某个国家的号码形态和长度。要了解号码是否活跃以及属于哪个网络，请在大规模发送前使用HLR或号码查询。"
sources: 
  - title: "Recommendation ITU-T E.164: The international public telecommunication numbering plan"
    url: "https://www.itu.int/rec/T-REC-E.164"
  - title: "Dialling procedures (international prefix, national (trunk) prefix and national (significant) number), ITU Operational Bulletin No. 994, 15.XII.2011"
    url: "https://www.itu.int/dms_pub/itu-t/opb/sp/t-sp-e.164c-2011-pdf-e.pdf"
  - title: "WhatsApp user phone number formats — WhatsApp Business Platform, Meta for Developers"
    url: "https://developers.facebook.com/documentation/business-messaging/whatsapp/business-phone-numbers/phone-numbers"
  - title: "Keeping leading zeros and large numbers — Microsoft Support"
    url: "https://support.microsoft.com/en-au/excel/keeping-leading-zeros-and-large-numbers"
  - title: "libphonenumber — Google, open-source library on GitHub"
    url: "https://github.com/google/libphonenumber"
---

# E.164手机号格式：转换与校验方法

Canonical: https://omnichannels.ai/zh/blog/e164-phone-number-format/
Language: zh
Publisher: OmniChannels.ai by BroadNet Technologies

本指南面向为短信或WhatsApp处理手机号、需要把号码转成API可接受形式的营销人员、分析师和开发者。内容说明什么是E.164，演示如何转换不同国家的号码，并介绍代码中的校验方法，以及在号码发出之前就把它们损坏的电子表格问题。

## 什么是E.164格式？

E.164是国际公共电信编号方案，由ITU-T以建议书E.164的形式发布。日常中，这个词描述的是一种书写号码的方式：加号、国家代码和只含数字的国家内号码。

E.164号码由以下部分组成：

- **`+`**代表国际呼叫前缀，各国不同（许多地方是00，美国是011）。
- **国家代码，**一到三位数字，例如阿联酋是971，美国和加拿大是1。
- **国家内号码，**即号码的其余部分，不含国内长途前缀。

建议书规定最大长度为15位数字，不含国际前缀。因此`+971501234567`是有效的E.164（12位数字），而17位的值不可能有效。我们的[E.164词条](/zh/glossary/e164/)给出了简短定义。

## 如何把本地手机号转换为E.164？

去掉格式，如果有国内长途前缀就去掉，然后加上加号和国家代码。

1. **删除空格、短横线、点和括号。**`050 123 4567`变成`0501234567`。
2. **如果号码带有国际呼叫前缀，就去掉它：**`00971...`或`011...`变成`971...`。
3. **如果该国使用国内长途前缀，就去掉它。**许多国家是`0`；美国和加拿大是`1`。
4. **如果还没有国家代码，就加上。**
5. **加上加号。**

要做到这一点，您需要知道号码所属的国家。`0501234567`只有附上国家才有意义，这就是电子表格应当带有国家列的原因。

## 不同国家的E.164号码是什么样的？

下表给出示例。这些号码只是说明用的占位号码，并非真实用户。拨号代码来自我们的法规数据；长途前缀来自ITU的拨号程序表。

| 国家 | 拨号代码 | 长途前缀（ITU表） | 本地形式（示例） | E.164 |
|---|---|---|---|---|
| 阿联酋 | +971 | 0 | 050 123 4567 | +971501234567 |
| 沙特阿拉伯 | +966 | 0 | 051 234 5678 | +966512345678 |
| 卡塔尔 | +974 | 未列出 | 5512 3456 | +97455123456 |
| 肯尼亚 | +254 | 0 | 0712 345 678 | +254712345678 |
| 英国 | +44 | 0 | 07700 900123 | +447700900123 |
| 德国 | +49 | 0 | 0151 12345678 | +4915112345678 |
| 印度 | +91 | 0 | 098765 43210 | +919876543210 |
| 西班牙 | +34 | 未列出 | 612 345 678 | +34612345678 |
| 意大利（手机） | +39 | 未列出 | 312 345 6789 | +393123456789 |
| 意大利（固话） | +39 | 未列出 | 06 1234 5678 | +390612345678 |
| 美国 | +1 | 1 | (202) 555-0123 | +12025550123 |

ITU表是2011年12月公布的状况，所以请把它当作了解规律的参考，具体到某个国家时，请用号码库或监管机构确认。

## 为什么意大利要保留开头的0？

因为在意大利，这个0是号码的一部分，而不是长途前缀。ITU的拨号程序表显示意大利（国家代码39）没有国内前缀，所以没有什么可去掉的。意大利的地区号码以0开头，如罗马风格的示例`06 1234 5678`，在国际格式中保留它：`+390612345678`。意大利手机号以3开头，没有零可保留，所以`312 345 6789`变成`+393123456789`。

不要把“一律去掉零”当作通用规则。同一张表也没有列出西班牙和卡塔尔的长途前缀，而且数据会变化，因此凡是无法手工核对的，都有理由使用号码库。

## 为什么短信和WhatsApp API需要E.164？

因为路由取决于无歧义的号码。没有国家代码的号码可能属于许多国家，平台就可能发往错误的市场、套用错误的发件人ID规则并按错误的费率计费。费率、发件人ID注册和营销发送时段都是按目的地国家应用的，而国家代码就是识别目的地的方式。

### Meta对WhatsApp号码有什么说明？

Meta关于WhatsApp用户手机号格式的文档称，发送消息请求支持加号、连字符、括号和空格，并强烈建议包含加号和国家拨号代码。如果缺少加号，发送方的国家拨号代码会被加到号码前，可能导致消息发到错误的号码。Meta的示例：对于印度（代码91）的发送方，`(631) 555-1234`会被投递到`+916315551234`，而`+1 (631) 555-1234`则能正确投递。Meta还指出，对于巴西和墨西哥，Cloud API可能修改某些号码中出现的额外前缀，并称这是标准行为。

稳妥的做法是：保存干净的E.164，并原样发送。

### 短信呢？

短信API同样期望完整的国际号码。有些要求不带加号的数字；格式因API和协议而异，所以请查看您所用API的文档，并用自己的号码测试。工作示例请参阅[通过API发送短信](/zh/blog/send-sms-api-examples/)和[通过API发送WhatsApp消息](/zh/blog/send-whatsapp-message-api-examples/)。

## 如何在代码中校验并规范化号码？

用正则表达式做快速的形态检查，用号码库做真正的校验。

一个常见的E.164形态检查：

```js
// Plus, a non-zero first digit, then 1 to 14 more digits: 15 digits at most
const E164 = /^\+[1-9]\d{1,14}$/;

function looksLikeE164(value) {
  return E164.test(value);
}

looksLikeE164("+971501234567"); // true
looksLikeE164("0501234567");    // false: no plus or country code
looksLikeE164("+0501234567");   // false: country codes do not start with 0
```

正则表达式只检查长度和字符。它会接受`+99999999999`，尽管并不存在这样的号码。要做真正的校验，请使用Google的开源libphonenumber，这是一个用于解析、格式化和校验国际电话号码的库，提供Java、C++和JavaScript版本，其他语言有社区移植版。它的README把`isValidNumber`描述为利用长度和前缀信息对某个地区进行的完整校验，并展示了如何把解析后的号码格式化为E.164。

```python
# pip install phonenumbers  (a Python port of libphonenumber)
import phonenumbers

def to_e164(raw, default_region):
    try:
        number = phonenumbers.parse(raw, default_region)  # e.g. "AE", "SA", "GB"
    except phonenumbers.NumberParseException:
        return None
    if not phonenumbers.is_valid_number(number):
        return None
    return phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)

print(to_e164("050 123 4567", "AE"))   # +971501234567 if the number is valid for the UAE
print(to_e164("+44 7700 900123", "GB"))
```

移植版由外部开发者编写，所以请检查您所选版本的质量。解析时使用取自客户所在国家的默认地区，然后保存E.164结果。同时保留原始输入，这样规则变化时可以重新解析。

请在录入环节规范化，也就是在注册表单、CRM导入或API中，而不是在发送时。同一个号码有两种写法，就会变成两个联系人，各自收到同一次活动。

## 如何修复电子表格中的手机号？

在输入或粘贴号码之前，把手机号列设为文本格式。常见问题如下：

| 问题 | 发生的情况 | 解决办法 |
|---|---|---|
| 前导零被去掉 | `0501234567`变成`501234567` | 先把单元格设为文本格式；或在输入内容前加撇号 |
| 科学记数法 | 长号码显示为`9.71501E+11` | 设为文本格式；Excel只保持15位数值精度 |
| 加号丢失 | 数值单元格可能不保留`+` | 设为文本格式，然后检查该列开头的字符 |
| 空格和短横线 | `971 50 123 4567` | 用查找和替换或`SUBSTITUTE`删除 |
| 缺少国家代码 | 只有本地号码 | 添加国家列；用公式构建号码 |

Microsoft的文档说明，Excel会去掉前导零并把大数字转换为科学记数法，而在应用文本格式之前输入的号码必须重新输入。直接打开CSV文件时，Excel会对每一列应用默认格式，所以请使用文本导入向导或“从文本/CSV”，把手机号列标记为文本。

对于以`050 123 4567`形式存放在A列的阿联酋手机号列表，下面的公式会把E.164构建为文本：

```text
="+971"&RIGHT(SUBSTITUTE(A2," ",""),9)
```

它在删除空格后保留最后九位数字，所以只适用于这种形态的号码。保存为CSV之前，请复制结果并粘贴为值。[手机号格式化工具](/zh/tools/phone-number-formatter/)无需公式即可转换号码，我们的[用Excel或CSV群发短信](/zh/blog/send-bulk-sms-from-excel-csv/)指南介绍了完整的上传流程。

## 示例：清理客户名单

“Souq Rafiq”（虚构）是迪拜的一家零售商，从三个系统导出了8,000个联系人，号码形如`0501234567`、`971 50 123 4567`、`+971-50-123-4567`和`00971501234567`。

1. 分析师根据每位客户的账单国家添加国家列。
2. 脚本以该国家为默认地区解析每一行，于是四种格式都变成`+971501234567`。
3. 校验未通过的行进入审核表，而不是被发送。
4. 规范化之后再去重，四种格式就合并成了一个联系人。
5. 活动前，用HLR查询标出不活跃的号码。请参阅[HLR查询详解](/zh/blog/hlr-lookup-number-validation/)。
6. 干净的列存为文本并上传。

先规范化才使重复检查得以生效；在此之前，同一位客户看起来像四个人。

## 常见错误有哪些？

- **一律去掉开头的零。**有些国家（如意大利）没有长途前缀。
- **保留零又加上国家代码，**得到`+9710501234567`。
- **向WhatsApp发送时不带加号，**导致被加上发送方的国家代码。
- **把正则表达式当作校验。**它检查的是形态，而不是有效性。
- **让Excel把手机号当作数字，**丢失零或变成科学记数法。
- **在发送时才规范化，**而不是在录入时。
- **以为格式有效就意味着号码可达。**已携号转网或已停机的号码仍会失败。
- **相信静态表格。**编号方案会变化；请使用持续维护的号码库。

## OmniChannels.ai如何提供帮助

OmniChannels.ai通过一个REST API接受用于短信和WhatsApp的国际号码，其[营销活动](/zh/platform/campaigns/)支持Excel和CSV上传，并带有预览和重复项过滤。BroadNet提供HLR和号码查询，因此您可以核实格式正确的号码是否在用。请阅读[短信API文档](/developers/sms/)和[WhatsApp API文档](/developers/whatsapp/)了解确切的请求字段，或就开通事宜[联系我们的团队](/zh/contact/)。
