海外号码筛选前先明确:归一化要产出什么样的号码
当你的联系人表格里混着带空格、带括号、甚至写着“+84 0 123 456 789”的号码时该怎么处理?结论是:在海外号码筛选前,你需要先把所有手机号统一成国际格式——也就是符合E.164标准的样子:国家码+国内有效号码,纯数字,不含国际前缀与国内长途冠字,总长不超过15位。这一步不做好,后续提交到Zalo、WhatsApp等平台API时,网关会直接拦截,连注册状态检测的边都摸不着。
Zalo官方开发者文档就明确写到,开放平台与ZBS API网关对传入手机号执行前置格式校验,号码一旦含有非法分隔符或非数字字符,接口直接返回错误码-108(Phone number invalid)。换句话说,格式问题是硬门槛,它在请求入口就会把你挡住。
为什么归一化必须排在去重之前
不少团队习惯先跑一次去重再清洗格式,这个顺序会埋雷。同一个手机号在原始表里可能有三种写法:带前导0的“0123456789”、带空格的“+84 123 456 789”、纯数字的“84123456789”,如果不先归一化,去重逻辑会把它当成三条不同记录,导致重复数据漏网。重复的号码进入后续检测,会白白消耗检测配额,还可能让同一个用户被多次打扰。
正确工序应该是:归一化 → 去重 → 分平台注册状态检测 → 结果分档。归一化是地基,只有先把格式洗成唯一标准形态,去重才有意义,后续的海外号码筛选才算数。
第一类脏号码:带本地长途前导 0 怎么判定与改写
“海外手机号前面的0要不要去掉”是很多人纠结的点。前导0是本地拨号时使用的国内长途冠字(Trunk Prefix),在国家码之后并不存在,所以把带前导0的号码转换到E.164格式,多数情况下这个0要去掉,但这里有个陷阱:不能对整个号码列表做全局正则“删掉首位0”。
正确做法是按来源国分组处理。如果一个国家用国际格式时本来就不需要前导0,那就剥离;但某些国家的国内号码第一位本身就是有效数字,盲目删0会把号码改错。最稳妥的办法:在号码表里保留原始列,另建一列存放归一化结果,同时记录来源国。处理前先抽检每个国家的样例号码,确认该国拨号规则后再批量改写。这样即使误删了,也能随时对照原始列找回。
第二类脏号码:缺国家码怎么批量补
手机号国家码怎么补?批量补码的前提是名单来源国单一且可追溯。比如你这次导入的是越南市场活动收集的号码,那么给整批号码加上越南国家码是可行的;但如果名单里混了新加坡、马来西亚、泰国多个国家的号码,用同一个国家码去补就会造成系统性错号。
无法确定归属国的号码,不要猜,标记为“待人工确认”比乱补码更安全。判断归属国时,除了看来源,还可以参考原始号码的位数——如果号码位数与该国手机号的常见长度不符,就要警惕来源国判断有误。
第三类脏号码:超 15 位、含分机与非数字字符怎么处理
ITU-T E.164规范明确,国际号码长度上限是15位纯数字(不含+号)。所以“号码超过15位是不是无效”的答案很明确:超了就大概率有问题。含扩展分机的号码,比如“+84-123-456-789 ext 100”,不能把分机拼进主号码里,否则网关会认为格式非法。
处理规则:先把括号、连字符、空格等分隔符全部去掉,只保留数字;然后看数字串长度,超过15位就检查是不是混入了分机号,把分机单独存到extension列;最后如果纯数字仍然超长,且无法拆分,就判定为无效号码剔除。注意,某些国家国内号码加上国家码后可能正好15位,这类合法号码不要误删。
第四类脏号码:固话与 VoIP 线路为什么要提前分流
“固话和VoIP号码能不能筛”取决于用途。如果要做WhatsApp、Zalo这类社交平台的注册状态检测,通常只有能接收验证短信的移动号码才有价值。固话和VoIP往往收不了短信,混在提交名单里会稀释结果质量,还浪费检测额度。
所以在归一化阶段,遇到已知的固定电话号段或VoIP特征号码,建议打上“非移动线路”标记,分流到独立批次处理,而不是直接混提。需要提醒的是,线路类型判断存在不确定性,比如某些虚拟运营商号码和手机号段无法一眼区分,最终状态还是要以实际检测结果为准。
四类脏号码判定与处理动作对照表
| 脏数据类型 | 判定线索 | 处理动作 | 验证方式 |
|---|---|---|---|
| 前导0 | 出现本地长途冠字0 | 按来源国剥离前导0 | 抽检对照原始列 |
| 缺国家码 | 号码以本地格式开头 | 确认归属国后批量补码 | 无法确认则标记待人工确认 |
| 超15位/含分机 | 数字串超长或含ext分机 | 拆分分机后剔除超长号码 | 统计剩余号码位数 |
| 固话/VoIP | 号段特征判别 | 标记非移动线路并分流 | 以实际检测结果为准 |

格式没洗干净会在哪一环报错:以 Zalo -108 为例
为什么说格式清洗是硬需求?Zalo开放平台明确规范,当提交的号码含有非法分隔符、非数字字符或不符合国际/国家标准格式时,接口直接返回错误码-108(Phone number invalid)。这个校验发生在请求入口,也就是说,格式不对,业务请求根本到不了注册状态判断环节。
所以排查问题时要先看格式,再看业务结果。如果你的Zalo模板消息报-108,先检查号码是否已做E.164归一化、是否混入了空格或+号。其他平台如WhatsApp、Viber也类似,格式错误会触发通用报错,排查顺序不变:先归一化,再谈其他。
归一化后的字段设计与小批试跑验证
为了让规则落地,建议建表时设计这些字段:原始号码、归一化号码、国家码、来源国、处理动作(剥离前导0/补码/剔除/待确认)。这样每一步都有迹可循。
验证方法也很关键:先抽200-500条小批数据跑归一化规则,然后人工抽样核对改写结果,确认没有系统性误伤(比如不该剥的0被剥了、补错国家码),确认无误后再全量提交。小批试跑的成本很低,但能避免全量数据被洗坏。

洗完格式之后:还要做一次跨平台注册状态检测
必须分清三件事:格式合法、运营商在网、平台已注册。E.164归一化只解决第一层,也就是让号码能通过语法校验,但它回答不了号码是不是空号、是不是已经在WhatsApp或Zalo上注册。这就像地址写对了,但不代表房子里住着人。
这就是为什么在去重之后,需要跑一次跨平台的注册状态检测。NexCheck的号码注册状态检测可以在100多个平台上批量验证号码的注册状态,配合批量号码检测API使用,你只需维护一套导入格式和结果字段,不必再为WhatsApp、Viber、Zalo各写一套适配。格式清洗保证请求不被网关拦截,而真正的海外号码筛选,靠的是这一步检测。
清洗完成后,把 NexCheck 的检测结果按平台分档后回写到CRM,形成一条完整的治理链路。更底层的有效性判断,可以参考手机号有效性检测和多平台号码检测这些方法。
常见问题
海外手机号前面的0是不是一定要去掉?
不一定。要看哪个国家以及号码在国际格式下是否允许保留。通常转换成E.164后,本地长途冠字要删除,但盲删首位0可能误伤。最稳的做法是保留原始列,按来源国规则处理,并小批验证。
E.164格式怎么转换?
简单说就是去掉所有空格、括号和特殊符号,加上国家码,并且号码总长度不超过15位。更准确的做法是:先确认号码归属国,再按该国规则剥离前导0和国内长途冠字,最后拼上国家码。
手机号国家码怎么补上去?
只有在明确知道归属国的前提下才能批量补码。如果名单是单一国家来源,可以整批加;多国混表则不能统一补。不确定的号码标记待确认,避免错补。
号码超过15位是不是就无效?
大概率无效,但也有例外。15位是国际规范的上限,超长通常意味着混入了分机号或误写。先检查是否可拆分出分机,拆分后若仍超长,建议剔除。
Zalo报错-108是什么意思?
-108 = Phone number invalid,入口处格式校验失败。更详细的触发条件与排查顺序,见上文“格式没洗干净会在哪一环报错”一节。
固话和VoIP号码能不能用于号码筛选?
看目的。如果做社交平台注册检测,固话和VoIP通常不能用于注册,建议提前分流或剔除。判断依据是号段特征,但存在误差,最终以检测结果为准。
NexCheck-筛号平台
评论(0)