手机归属地查询 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)





