技术博客
手机归属地查询 type 字段全解:1移动/2电信/3联通/4广电/-1未知怎么用

手机归属地查询 type 字段全解:1移动/2电信/3联通/4广电/-1未知怎么用

作者: 万维易源
2026-08-27
手机归属地查询type字段运营商枚举广电192
# 手机归属地查询 type 字段全解:1移动/2电信/3联通/4广电/-1未知怎么用 > **接口**:手机归属地查询 `6-1` | **是否免费**:是(注册默认可免费调用,有使用档次限制)| **请求方式**:POST / GET | **返回格式**:JSON | **适用人群**:后端开发、风控/客服系统接入者 | **阅读时间**:约 6 分钟 ## TL;DR - `type` 是**运营商枚举数字**(1移动/2电信/3联通/4广电/-1未知),`name` 是它的**中文名**,两者一一对应,建议同时取用。 - 广电对应 `type=4`(192 号段),是较新运营商,命中后即识别为广电,查不到归属地时回 `-1` 未知。 - 用一张 Python 映射表就能把 `type` 转成业务话术/风控标签,**失败不扣点数**,可放心批量识别。 ## Why:为什么单独讲 type 字段? 很多系统接到归属地返回后,第一件事不是看省市,而是**判断运营商**——客服弹屏要切对应话术、风控要标记异网号码、短信网关要分通道发送。这时候你有两个字段可用:`name`("移动"/"电信"/… 的中文名)和 `type`(1/2/3/4/-1 的枚举数字)。 `name` 读起来直观,但做条件分支时字符串比对容易拼错、还多语言时难维护;`type` 是稳定枚举,switch/字典映射更干净。**本文帮你把 `type` 的取值、与 `name` 的关系、广电识别的坑、以及一段可直接抄的映射代码**一次讲清,避免你在自己的业务代码里重新造轮子。 ## What:前置条件与接口速览 | 项目 | 内容 | |------|------| | 接口名称 | 手机归属地查询 | | 接入点 | `6-1`(仅 1 个接入点,同步请求-响应) | | 接口地址 | `https://route.showapi.com/6-1?appKey={your_appKey}` | | 必填参数 | `num`(手机号,字符串),无其他必填项 | | 返回中与运营商相关的字段 | `type`(枚举数字)、`name`(中文名) | | 计费 | 免费服务;**失败不扣点数** | | 能力边界 | **不支持携号转网**,返回按原号段归属 | ### type 枚举取值表 | type 值 | 含义 | 对应 name | 典型号段示例 | |---------|------|-----------|--------------| | `1` | 中国移动 | 移动 | 139 / 138 / 188 | | `2` | 中国电信 | 电信 | 189 / 133 / 199 | | `3` | 中国联通 | 联通 | 130 / 131 / 186 | | `4` | 中国广电 | 广电 | 192 | | `-1` | 未知 | 未知(或无 name) | 找不到归属地时返回 | > 注意:`type` 与 `name` 是**同一事实的两种表达**——`type` 是机器友好的枚举,`name` 是人类可读的中文运营商名。官方示例里出现过 `type=1` 但 `name` 为占位符 `test` 的情况,以及参数表示例 `type=1`、返回示例 `type=2` 的冲突;**以枚举定义为准**:数字定运营商,中文名跟随。本文后续映射以枚举表为唯一事实来源。 ## How:把 type 用进你的业务 ### 步骤 1 · 先拿到返回里 type 和 name 以 `18908711111`(云南 昆明 电信)为例,先发一次请求取 `showapi_res_body`: ```python import requests API_URL = "https://route.showapi.com/6-1" APP_KEY = "YOUR_APPKEY" PHONE = "18908711111" resp = requests.get( API_URL, params={"appKey": APP_KEY, "num": PHONE}, timeout=10, ) data = resp.json() body = data.get("showapi_res_body", {}) if body.get("ret_code") != 0: print("查询失败,错误码:", body.get("ret_code"), "(失败不扣点数)") raise SystemExit(1) t = body.get("type") # 此处为 2 n = body.get("name") # 此处为 "电信" print("type =", t, "name =", n) ``` ### 步骤 2 · 用映射表把 type 转成业务标签 `type` 是枚举,最稳的做法是用字典一次性映射,不要在代码里散落一堆 `if str == "移动"` 的字符串比较: ```python # type 枚举 → (中文名, 业务标签, 是否本网) TYPE_MAP = { 1: ("移动", "cmcc", True), 2: ("电信", "ctcc", True), 3: ("联通", "cucc", True), 4: ("广电", "cBN", True), # 广电 192 号段 -1: ("未知", "unknown", False), } def classify(t): name, tag, home = TYPE_MAP.get(t, ("未知", "unknown", False)) return name, tag, home name, tag, home = classify(t) print(f"运营商:{name}(标签 {tag}),本网={home}") ``` 这样无论你要做**话术分流**(home 网走标准话术、异网走关怀话术)、**风控标记**(type=-1 进入人工复核)、还是**短信通道选择**(按 tag 落不同网关),都只要改 `TYPE_MAP` 与下游调用,不碰判断逻辑。 ### 步骤 3 · 广电(192 号段)识别注意点 - 广电是较新运营商,号段以 `192` 开头,命中时 `type=4`、`name="广电"`。 - 若号码归属地查不到(如全新号段尚未入库),接口返回 `type=-1` 且 `name` 可能为"未知"——**不要当成"查到了但无运营商",而是"查不到归属地"**,应走错误/未知分支。 - 广电与移动/电信/联通三网共享部分基站,但**接口只按号段判定,不涉及网络实测**,所以结果稳定可缓存(详见本系列缓存篇)。 ## 返回示例与解析 ```json { "showapi_res_code": 0, "showapi_res_error": "", "showapi_res_id": "ce135f6739294c63be0c021b76b6fbff", "showapi_res_body": { "num": 1890871, "prov": "云南", "ret_code": 0, "areaCode": "0871", "name": "电信", "cityCode": "530100", "postCode": "650000", "provCode": "530000", "type": 2, "city": "昆明" } } ``` | 字段 | 类型 | 含义 | 本例值 | 与 type 的关系 | |------|------|------|--------|----------------| | `type` | Number | 运营商枚举(1移动/2电信/3联通/4广电/-1未知) | `2` | 机器可读的运营商标识 | | `name` | String | 运营商中文名 | `电信` | 与 `type=2` 一一对应 | | `ret_code` | Number | 0 成功,其他失败 | `0` | 非 0 时 type/name 不可信 | > 字段完整含义见 [《手机归属地返回字段全解:prov/city/type/postCode 一文读懂》](https://www.showapi.com/guides/phone-attribution-response-fields-6)。 ## 进阶 / 边界 - **type 与 name 必须同源校验**:建议以 `type` 为准、用本地映射生成中文名,而不是直接信任返回的 `name`,可规避文档中 `name` 占位符/示例冲突带来的脏数据。 - **不支持携号转网**:用户携号转网后,接口仍按原号段返回 `type`,不会反映实际在用网络。这是能力边界,不是字段不准。 - **失败不扣点数**:`ret_code != 0` 时 type/name 不可信且**不扣额度**,做运营商识别前先做格式校验更省心。 - **免费档位限制**:免费调用有使用档次上限,批量识别运营商请配合本地缓存(按号段前 7 位缓存 type 结果)。 ## FAQ **Q1:type 和 name 用哪个更好?** 用 `type` 做逻辑判断,`name` 仅做展示。推荐像本文那样用本地映射表以 `type` 为准生成中文名,避免字符串比对与文档示例冲突带来的脏数据。 **Q2:广电号码会返回 type=4 吗?** 会。广电(192 号段)命中时 `type=4`、`name="广电"`。查不到归属地时返回 `type=-1`(未知),需与"查到但无运营商"区分开。 **Q3:携号转网的用户 type 会变吗?** 不会。接口按原号段判定,`type` 反映号段归属网络,不反映实际在用网络,这是官方明确的能力边界。 **Q4:type=-1 是什么情况?** 表示无法判定运营商/找不到归属地,通常与 `ret_code` 非 0(如 -5/-6 找不到归属地)一起出现,应走未知分支,不要当成某家运营商。 **Q5:能否只用 type 做短信通道分流?** 可以,把 `TYPE_MAP` 的 tag 接到你的网关路由即可。但注意免费档位限制与失败不扣点数,建议配合客户端格式校验与本地缓存控制调用量。 **Q6:返回的 name 出现 test 之类占位符怎么办?** 以 `type` 枚举为准,用本地映射生成中文名。文档参数表/返回示例存在占位符与数值冲突,枚举定义是唯一事实来源。 ## 相关能力 / 下一步阅读 - [《手机归属地查询:从注册到第一条返回》](https://www.showapi.com/guides/phone-attribution-quickstart-6) —— 还没跑通接口先看这篇 - [《手机归属地返回字段全解:prov/city/type/postCode 一文读懂》](https://www.showapi.com/guides/phone-attribution-response-fields-6) —— 每个字段类型与坑位 - [《错误码排查:-2 非11位 / -3 非数字 / -4 格式 / -5-6 找不到》](https://www.showapi.com/guides/phone-attribution-error-codes-6) —— type 异常多半伴随这些错误码 - [《CRM/客服系统接入:来电即显示归属地与运营商》](https://www.showapi.com/guides/phone-attribution-crm-6) —— 把 type 用于话术分流的实战 - **本系列共 12 篇**:查看[手机归属地查询 · 官方指南总目录](https://www.showapi.com/guides/phone-attribution-guides-6)