电话号码验证检查什么?

电话号码验证根据号码所属国家的编号规则进行检查,确认的是号码可能存在,而非有人在该号码上可达。

验证这个词背后隐藏着三个不同的问题。一个问号码的格式是否像真实号码。一个问是否有网络为它应答。一个问与你交互的人是否持有它。每个问题需要不同的检查方式,每种方式都留有未知。

格式检查能告诉你什么?

号码属于运营商被允许分配的号段。

Google 的 libphonenumber 在运营商可以自由将号码分配给订户时,将号段视为有效。其 FAQ 写道:

A valid number range is one from which numbers can be freely assigned by carriers to users.

有效性不能说明某个具体号码是否已被分配或是否能应答。同一页面写道:

Do not rely on libphonenumber to determine whether numbers are currently assigned to a specific user and reachable.

因此,格式检查回答的是关于编号计划的问题。它既不能说明号段是否已分配给任何人,也不能说明电话是否会响。

拨号也不是替代测试。FAQ 给出了呼叫可以接通无效号码的两个原因。有些国家会忽略末尾多余的数字,因此 1800 MICROSOFT 实际接通的是一个较短的号码。在号码重编期间,有些运营商会在旧号码已普遍停用后仍保持其可用。

网络查询能增加什么?

只有网络才掌握的那部分答案。

查询向运营商和号码情报来源询问特定号码,而非号段。这将若干问题从未知变为已回答:

检查项返回内容仍然未知的内容
格式号码可解析且位于可分配的号段内该号段是否已分配给任何人
线路类型号码是移动号码、固定电话、VoIP、免费电话还是机器对机器在更精细的粒度上该号段分配给了什么服务
服务网络当前为该号码提供服务的网络,以及发放该号码的网络终端是否已开机
携号转网状态号码上次转网的时间关于订户的任何信息
在线状态号码是否已注册并能立即接收流量谁在使用该终端
持有关系无。查询从不询问本人你的用户是否控制该号码

最后一行是注册流程中最关键的。没有任何查询能确认持有关系,因为查询从不涉及本人。

只有验证质询才能证明什么?

在你流程中的人能在该号码上接收流量。

libphonenumber FAQ 将质询视为唯一可行的答案,因为各国的编号实践差异太大,其他方式无法解决这个问题:

This is not technically feasible without such a verification step given the complicated international world we live in, with varying standardization practices in different regions.

发送验证码并接收回来,因此是与上述两种截然不同的检查方式。它需要一条消息和一个往返。它也是唯一能将号码与你面前的人关联起来的方式。OTP 是什么意思介绍了验证码本身,Verify 指南介绍了如何执行质询。

如何解读无人能回答的检查?

视为未知,这与否定不同。

无法确定在线状态的号码不等于不可达的号码。将二者等同对待会阻断那些网络只是未应答的客户。

Bird 在响应中将它们区分开来。你请求的每个属性都报告各自的 status:

  • ok:属性已被回答,其值存在。
  • unavailable:没有收到回答,因此该块为 null。
  • inconclusive:收到了回答,但未能解析该属性。

只有 ok 携带值。在线状态块具有 status: ok 和 reachable: false 时是真正的否定,因为网络已回答并报告该号码不可达。

因此先对 ok 进行分支判断,其他情况一律视为未回答。状态词汇表是开放枚举,因此无法识别的值是未来的状态而非错误。对 ok 进行分支判断会随着词汇表扩展而始终正确。

如何选择电话号码查询服务商?

选择字段、市场覆盖和计费规则与你的决策需求匹配的服务商。

决策要点Bird Lookup对其他服务商应提出的问题
语法与有效性要求国际号码格式,并报告号码是否符合编号计划。它是否规范化输入并在不猜测的情况下拒绝格式错误的号码?
线路类型与运营商在基本结果中返回线路类型、服务网络和发放网络。包含哪些运营商和线路类型字段,它们是当前值还是分配值?
携号转网在基本结果中报告携号转网状态,并可返回额外的携号转网数据。它显示的是当前运营商、原始运营商还是转网历史?
时效性在线状态和漫游查询的是当前网络状况;其他字段描述编号和分配信息。哪些字段是实时的、缓存的还是带时间戳的?
未知结果每个请求的属性具有 ok、unavailable 或 inconclusive 状态。能否区分未回答的属性与否定结果?
市场覆盖即使查询成功,某些属性也可能对特定号码或运营商不可用。哪些国家和运营商支持每个属性?
计费基本查询计费一次。可选属性仅在交付时计费,失败的属性不计费。未回答的属性收费多少,哪些附加项会影响账单?

排名列表中的替代方案展示了不同的权衡取舍。Twilio Lookup 提供基本的格式化和验证。可选包涵盖线路类型、线路状态、SIM 卡更换、身份信息、来电显示名称、已重新分配号码和风险信号。覆盖范围和审批条件因包和市场而异。

Abstract API 的电话号码验证文档介绍了有效性、国家、运营商和线路类型字段。Veriphone 的验证和运营商查询页面介绍了有效性、国家、运营商、线路类型和当前运营商结果。两者分别发布了覆盖范围和额度规则。每个服务商所记录的覆盖范围、未知结果行为和计费方式决定了它是否适合注册或路由决策。

如何在 Bird 上查询号码?

将号码发送到查询端点,读取你请求的数据块。

POST /v1/lookup/phone-number 接受一个 phone_number 和一个可选的 type 数组。每次查询都会返回服务网络和发放网络、携号转网状态、国家和线路类型。type 数组可添加 classification、porting、presence、roaming、sim_swap 或 score,每项单独计费且仅在交付时收费。查询不会联系该号码。

重复使用 Idempotency-Key 会返回已存储的结果,而不是执行并计费第二次查询。查询指南介绍了流程,API 参考文档介绍了各字段。

简而言之

  1. 有效意味着号段存在,而非号码正在使用。

    Google 的电话号码库将有效号段定义为运营商可以自由分配给用户的号段。

  2. 接通的电话不能证明号码有效。

    有些国家会忽略多余的尾部数字,有些运营商在号码重编期间会让旧号码继续工作,远超其他地方停止使用的时间。

  3. 只有质询才能证明持有关系。

    发送验证码并收回它是唯一能确认谁持有该号码的检查方式,这就是验证作为独立步骤存在的原因。

  4. 未应答的检查不等于否定回答。

    Bird 为每个请求的属性报告各自的状态,因此无人能回答的属性与被明确回答为否的属性始终可区分。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

你的下一个创意。 随时连接。