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

约 11 分钟 进阶手机号码归属地查询type 字段运营商识别运营商枚举
# 手机归属地查询 type 字段全解:1移动 2电信 3联通 4广电 -1未知怎么用 接口:手机归属地查询(apiCode=6,接入点 6-1)|是否免费:是,注册后默认可调用,设使用档次限制|请求方式:POST / GET|返回格式:JSON|适用人群:要按运营商走分支逻辑的开发者|阅读时间:约 7 分钟|最后实测核对:2026-09-18 发短信要选通道、客服话术要分家、账单要对口径,这类需求最后都落到同一个字段上:`type`。它是手机归属地查询接口里的运营商枚举,取值只有 1、2、3、4、-1 五种。这篇讲清楚每种取值从哪来、`name` 为什么不能替代它,以及分支代码怎么写。 ## 核心要点 - `type` 取 1 表示移动、2 表示电信、3 表示联通、4 表示广电、-1 表示未知,是数字枚举,取值稳定。 - `name` 返回的是套餐或品牌名,实测会出现「移动全球通卡」「联通186卡」「192卡」这类值,形态不固定,不适合做判断条件。 - 广电是 192 号段,实测 `19200001234` 返回 `type = 4`、`name = 192卡`、归属地广东佛山。 ## 枚举取值 | `type` | 运营商 | 2026-09-18 实测样本 | 样本返回的 `name` | |--------|--------|---------------------|-------------------| | 1 | 移动 | `13800138000` | 移动全球通卡 | | 1 | 移动 | `19700001234` | 移动 | | 2 | 电信 | `18900189000` | 中国电信天翼卡 | | 2 | 电信 | `19999999999` | 电信 | | 3 | 联通 | `18600186000` | 联通186卡 | | 4 | 广电 | `19200001234` | 192卡 | | -1 | 未知 | 本批实测未取到 | — | 同一家运营商在不同号段上返回的 `name` 并不一致。`1970000` 是移动号段,`name` 只返回「移动」;`1380013` 是移动号段,`name` 返回「移动全球通卡」。用 `name` 做 `if` 判断,上线后遇到新号段就得改代码。 `type` 的取值只有 5 种,不会因为新号段放出来而变化。这是它适合做分支条件的原因。 ## 实测样本的地域信息 顺手把实测拿到的两条完整返回放在这里,可以对照 `type` 和归属地字段的对应关系。 `num=19200001234`(广电): ```json { "prov": "广东", "city": "佛山", "name": "192卡", "type": 4, "num": 1920000, "areaCode": "0757", "postCode": "528000", "provCode": "440000", "cityCode": "440600", "ret_code": 0 } ``` `num=19700001234`(移动): ```json { "prov": "青海", "city": "西宁", "name": "移动", "type": 1, "num": 1970000, "areaCode": "0971", "postCode": "810000", "provCode": "630000", "cityCode": "630100", "ret_code": 0 } ``` 两条返回的字段结构完全一致,只有值不同。`type` 的位置固定,取出来直接用于分支。 ## 分支逻辑怎么写 ```python import requests CARRIER = {1: "移动", 2: "电信", 3: "联通", 4: "广电", -1: "未知"} # 按运营商分流的通道配置,示例用途 CHANNEL = { 1: "sms-channel-mobile", 2: "sms-channel-telecom", 3: "sms-channel-unicom", 4: "sms-channel-cbn", } def carrier_of(phone: str) -> dict: resp = requests.get( "https://route.showapi.com/6-1", params={"appKey": "YOUR_APPKEY", "num": phone}, timeout=10, ) body = resp.json().get("showapi_res_body", {}) if body.get("ret_code") != 0: # 失败时按未知处理,不要拿空值去拼字符串 return {"carrier": "未知", "type": -1, "channel": None} t = body.get("type") return { "carrier": CARRIER.get(t, "未知"), # 展示用 "type": t, # 存库用 "channel": CHANNEL.get(t), # 分支用 "raw_name": body.get("name"), # 原始品牌名,仅供展示 "city": body.get("city"), } ``` Node.js 版本,判断部分保持一致: ```javascript const CARRIER = { 1: "移动", 2: "电信", 3: "联通", 4: "广电", [-1]: "未知" }; const resp = await fetch( "https://route.showapi.com/6-1?appKey=YOUR_APPKEY&num=19200001234", { signal: AbortSignal.timeout(10000) } ); const { showapi_res_body: body } = await resp.json(); const type = body.ret_code === 0 ? body.type : -1; console.log(CARRIER[type] ?? "未知", "| 原始 name:", body.name); // 输出:广电 | 原始 name: 192卡 ``` cURL 直接看原始返回: ```bash curl -s "https://route.showapi.com/6-1?appKey=YOUR_APPKEY&num=18600186000" \ --max-time 10 \ | python -c "import sys,json;b=json.load(sys.stdin)['showapi_res_body'];print('type=',b['type'],'name=',b['name'],'city=',b['city'])" ``` ## `type = -1` 怎么兜底 按文档定义,`-1` 表示无法识别运营商。本批实测没有取到这个值,实际出现时按「无法归类」处理:不要默认归到移动或联通,也不要用它去选消息通道。 具体做法是给分支表留一个默认出口,代码里用 `CARRIER.get(t, "未知")` 和 `CHANNEL.get(t)` 这类带兜底的写法,取不到就落空值,界面显示「未知」,通道走人工审核或默认通道。 `type` 取不到有效值时,`num` 仍然可能是有值的。`19999999999` 的实测返回里 `type = 2`、`name = "电信"`,同时 `ret_code = -1`、归属地字段全空。也就是说 `type` 和归属地信息的完整度是两件事,判断成败看 `ret_code`,不要看 `type` 是否有值。 ## FAQ **Q1:`type` 和 `name` 用哪个?** 分支逻辑用 `type`,界面展示用 `name`。`type` 是固定的 5 个枚举值,`name` 实测会返回「移动全球通卡」「192卡」这类品牌名,形态不固定。 **Q2:广电的号码能识别吗?** 能。广电是 192 号段,实测 `19200001234` 返回 `type = 4`、`name = 192卡`,归属地广东佛山。 **Q3:为什么同一个运营商返回的 `name` 不一样?** `name` 表达的是号段的品牌或套餐归属,同属移动的 `1380013` 和 `1970000`,前者返回「移动全球通卡」,后者只返回「移动」。这是 `name` 的正常形态,不是异常。 **Q4:`type = -1` 什么时候出现?** 文档定义为无法识别运营商时返回。本批实测没有触发过,业务代码按「无法归类」分支处理即可。 **Q5:能自己维护一张号段表来替代这个字段吗?** 可以维护,但新号段按批放出来,表要跟着更新,维护成本落在调用方。`type` 由官方侧维护,半年同步一次新增号段的归属信息。 **Q6:携号转网后 `type` 会变吗?** 不会。号码办理携号转网后,返回的运营商仍按原号段归属。官方明确说明不支持携号转网后的运营商识别。 ## 下一步阅读 - [手机归属地查询返回字段全解:11 个字段的类型、取值与粒度](https://www.showapi.com/guides/phone-attribution-response-fields-6) —— `type` 在整份返回里的位置 - [手机归属地查询返回 -2、-3、-4 是什么意思?错误码逐条对照与排查](https://www.showapi.com/guides/phone-attribution-error-codes-6) —— 取不到 `type` 时先看 `ret_code` - [手机归属地查询接进 CRM:来电弹屏显示归属地与运营商](https://www.showapi.com/guides/phone-attribution-crm-6) —— 用 `type` 做话术分流的完整场景 - **本系列共 12 篇**:查看[手机归属地查询指南总目录](https://www.showapi.com/guides/phone-attribution-guides-6)
加载中...