手机号码格式验证与+86国际格式转换
粘贴一个号码或一整列号码,立即判断电话号码格式是否有效,并给出国内格式、+86国际格式和E.164格式。号码在浏览器中处理。
每一行都在这个标签页里检查,完整号码不会上传。
中国大陆号码直接输入:手机号码11位,座机号码要带区号。境外号码请以+和国际区号开头。空格和短横线可以保留。
结果显示号码类型、国家/地区,以及E.164、国际格式、国内格式和tel:链接四种写法,每种都能直接复制,包括中国手机号国际格式(+86写法)。这里只验证格式,不能判断号码是否在用。
正确的手机号码格式:11位,以1开头
中国大陆的手机号码都是11位,第一位是1。前三位是号段,比如13X、15X、18X、19X;前7位决定号码的归属地。验证时,工具先看位数,再看开头几位是否属于已分配的号段,光数位数是不够的。
| 输入的号码 | 结果 | 原因 |
|---|---|---|
| 131 2345 6789 | 有效(手机) | 11位,131属于已分配的手机号段 |
| +86 131-2345-6789 | 有效(手机) | +86、空格和短横线都能识别,结果和上一行相同 |
| 0086 131 2345 6789 | 有效(手机) | 开头的00按+处理,等同于+86 |
| 131 2345 678 | 位数不足 | 只有10位。中国大陆没有10位的手机号码,多半是漏打了一位 |
| 154 1234 5678 | 未分配 | 位数正确,但154号段没有分配 |
| 086 131 2345 6789 | 无效 | 国际区号是86,不是086;多出来的0让号码位数太多 |
| +999 123 4567 | 无效 | 没有国家/地区使用+999 |
“未分配”“无效”“位数不足”都说明号码不符合编号规则,多半是漏打、多打或打错了数字。检查单个号码时,位数不够会提示继续输入。号段数据来自libphonenumber,刚启用的新号段在数据更新前可能被判为未分配。“有效”只说明号码符合编号规则,不说明号码在用。手机号码还可以查号段属于哪家运营商,查到的是号段最初分配的运营商,号码可能已携号转网。
手机号码+86格式怎么填:+86、0086与86的区别
86是中国的国际区号,+代表国际冠码,所以+86和0086指向同一个区号。所谓86手机号码格式,就是在11位手机号前加上+86,手机号码前面不加0。下表以样例号码131 2345 6789为例,列出不同场合的填法。
| 填写的地方 | 怎么填 | 示例 |
|---|---|---|
| 有国家/地区选项的境外网站或App | 国家/地区选“中国(+86)”,号码栏只填11位,不要再加86 | 131 2345 6789 |
| 没有国家/地区选项的表单 | 从+86开始填 | +86 131 2345 6789 |
| 要求E.164格式的系统 | +86后直接接11位,不留空格 | +8613123456789 |
| 国内网站、App和快递单 | 只填11位,不加86 | 13123456789 |
| 在境外用座机拨打 | 先拨当地的国际冠码,再拨86和号码;国际冠码是00的地方就拨0086 | 0086 131 2345 6789 |
| 手机通讯录 | 存成+86格式,出境后也能直接拨打 | +86 131 2345 6789 |
在手机拨号键盘上长按0可以输入+。+在任何国家/地区都代表当地的国际冠码,所以存号码、填表时用+86比0086更通用。中国大陆和欧洲多数国家的国际冠码是00,美国和加拿大是011。不存在086这个区号。
国际电话号码格式:座机去掉区号前的0
国际电话号码格式各地通用:先写+和国际区号,再写去掉国内长途前缀的号码。中国大陆的座机要去掉区号前的0,手机号码本来就不带0。下表的中国、中国香港和意大利号码是libphonenumber的样例号码,英国和美国号码取自当地为影视剧保留的号段。
| 国家/地区 | E.164 | 国际格式 | 国内格式 |
|---|---|---|---|
| 中国(手机) +86后直接接11位,不加0。 | +8613123456789 | +86 131 2345 6789 | 131 2345 6789 |
| 中国(固定电话) 北京区号010,写成国际格式时去掉0。 | +861012345678 | +86 10 1234 5678 | 010 1234 5678 |
| 中国(400号码) 格式可以转换,但通常无法从境外拨通。 | +864001234567 | +86 400 123 4567 | 400 123 4567 |
| 中国香港(手机) 香港号码8位,没有区号。 | +85251234567 | +852 5123 4567 | 5123 4567 |
| 英国(固定电话) 英国通信管理机构Ofcom为影视剧保留的伦敦号码,同样去掉开头的0。 | +442079460123 | +44 20 7946 0123 | 020 7946 0123 |
| 意大利(固定电话) 意大利座机的0是号码的一部分,+39后面要保留。 | +390212345678 | +39 02 1234 5678 | 02 1234 5678 |
| 美国 555-0100到555-0199为影视剧保留。加拿大也使用+1。 | +12125550123 | +1 212 555 0123 | (212) 555-0123 |
座机号码格式:区号加7到8位号码
座机号码由区号和本地号码组成。区号以0开头:北京是010;上海、广州、天津、重庆、沈阳、南京、武汉、成都、西安是02X,比如上海021、广州020;其他城市是4位的0XXX。本地号码是7位或8位。
建议这样做
- 区号和本地号码之间用短横线或空格隔开,比如010-12345678,或者010 1234 5678。
- 写成国际格式时去掉区号前的0:+86 10 1234 5678。
- 给外地或境外的人留号码时,一定带上区号。
- 有分机号时写在后面,比如010-12345678转123。
不要这样做
- 写成+86 010 1234 5678或+86 (0)10 1234 5678:+86后面不保留区号的0,有些表单会因此报错。
- 只写本地号码:没有区号,外地的人拨不通,本工具也判断不了号码属于哪个城市。
- 给400号码加区号:400号码是全国统一的10位号码,本身没有区号。
批量检查表格里的手机号码格式
从Excel、WPS表格或CSV文件里复制一整列号码,粘贴到上方的“批量检查”中,工具会逐行检查格式,并生成E.164列。号码只在这个标签页中处理,不会上传。
整列粘贴
每行一个号码,空格、短横线和括号都能识别;表格去掉了座机区号前的0,也能正常读取。一次最多检查500行。
逐行给出结果
每行显示有效、未分配、无效或位数不足,并列出E.164格式、号码类型和国家/地区。
下载CSV或复制E.164列
把E.164列贴回原表格。写法统一以后,带+86和不带+86的重复号码也能对上。
先选对国家/地区
没有+的号码按你选的国家/地区读取。如果选成美国,以1开头的11位数字可能被当成美国号码,所以检查国内名单时要选中国。
开发者:只用手机号码正则表达式为什么不够
常见的手机号正则要么只检查“1开头、11位”,要么把号段写死在表达式里。前者会放过未分配的号段;后者在19X、16X这样的新号段启用后,会把有效号码误判为无效。更稳妥的做法是用带编号规则数据的库解析号码,校验通过后以E.164格式存储,显示时再转换成国内格式或国际格式。
import { parsePhoneNumberFromString } from 'libphonenumber-js/max'
const phone = parsePhoneNumberFromString('131 2345 6789', 'CN')
phone.isValid() // true
phone.getType() // 'MOBILE'
phone.number // '+8613123456789'(E.164)
phone.formatInternational() // '+86 131 2345 6789'
phone.formatNational() // '131 2345 6789'
phone.getURI() // 'tel:+8613123456789'
// 只看“1开头、11位”的正则,会放过未分配的154号段
/^1[3-9]\d{9}$/.test('15412345678') // true
parsePhoneNumberFromString('15412345678', 'CN').isValid() // false本页使用libphonenumber-js(max元数据),底层是Google公开的libphonenumber号码数据(v9.0.40)。体积更小的min元数据只检查位数,不检查号段。
常见问题
手机号前加86还是0086?
看在哪里填。表单有单独的国家/地区栏时,选中国(+86),号码栏只填11位手机号。只有一个号码栏时,写+86再接11位,比如+86 131 2345 6789。0086是在国际冠码为00的国家/地区拨打中国号码时的写法,和+86指向同一个号码。+在任何国家/地区都代表国际冠码,所以填表和存通讯录时用+86更通用。
中国的国际区号是086还是86?
是86。国际区号本身不带0,+86和0086表示的都是86。086是把国际区号和国内长途前缀0混在一起的写法,并不存在,填进表单往往会被判为格式错误。在上面的工具里,086开头的手机号码会被判为无效(位数太多)。
手机号码是几位数?有10位的手机号吗?
中国大陆的手机号码都是11位,以1开头,没有10位的手机号码。少一位多半是漏打了数字,工具会提示位数不足。写成+86国际格式时,+86后面还是这11位,前面不加0。
注册时提示“手机号码格式不正确”怎么办?
先检查这几点:是否多打或少打了一位;是否混进了全角数字或其他符号;表单是否要求先在国家/地区栏选择中国(+86);号码栏里是否又重复加了86或0086。然后把号码粘贴到上面的工具里,显示有效后,按表单的要求复制国内格式或E.164格式再填。如果工具显示有效、表单仍然报错,可能是表单的验证规则没有收录16X、19X等较新的号段,可以联系网站或App的客服。
格式有效就说明号码在使用吗?能做空号检测吗?
不能。格式有效只说明号码符合中国大陆的编号规则,而且号段已经分配。号码有没有开户、是否停机、是不是空号,只看号码本身判断不了,本工具也不做空号检测。已经销号的号码,格式照样有效。想确认号码能不能打通,只能拨打一次,或者发送短信验证码。如果是陌生号码打来的电话,可以先查这个号码是哪里的,再对照识别诈骗电话的风险信号。
座机号码一定要加区号吗?
在同一个城市用座机拨打本地座机,可以不加区号。从外地或境外拨打,以及在表单、名片上写号码时,都要带上区号,比如北京的010。在上面的工具里也要输入区号,否则工具无法判断号码属于哪个城市,只会提示位数不够或号段未分配。写成+86国际格式时,去掉区号前的0。
400和800开头的号码能写成+86国际格式吗?
格式上可以:400 123 4567写成+86 400 123 4567,E.164格式是+864001234567。但400号码由主叫和被叫分摊话费,800号码由被叫付费、通常只能用固定电话拨打,这两类号码一般无法从境外拨通,libphonenumber的号码数据也把它们标为不支持国际拨打。给境外的人留联系方式时,最好同时留一个带区号的座机号码或手机号码。