目录

IT审计-地域分布之手机号码归属地解析

手机号码归属地解析

根据《2020 首发业务若干问题解答》第 53 问, IT 审计需要对互联网终端客户情况是否存在异常进行分析。

其中的分析维度就包含了消费者的地域分布

当我们拿到的客户的数据,可能发现并没有终端用户所在的省、市信息,

只有终端用户的手机号码或者身份证等信息。

为了能进行地域分布的统计分析,本文将介绍如何利用 Python 将手机号码解析出省、市信息。

这里一共介绍三种方式,相信能够应对所有的情况。

phone库

我们可以使用 python 的phone库。

github链接:https://github.com/ls0f/phone

安装

在终端中用pip安装:

pip install phone

用法

用法非常简单,这里是官方文档示例:

from phone import Phone

p  = Phone()
data = p.find(18190478611)
print(data)

执行结果:

{'phone': '18190478611', 'province': '四川', 'city': '德阳', 'zip_code': '618000', 'area_code': '0838', 'phone_type': '电信'}

我们可以从电话号码解析出:省、市、邮政编码、行政区划、运营商。

这个库更新时间为 2018 年10月。

由于作者似乎没有再更新,所以有些号码可能存在不能解析的情况。

phonenumbers库

除了上面的phone库外,我们这里还有一个一直保持更新的 python 库: python-phonenumbers

安装

pip install phonenumbers

用法

from phonenumbers import geocoder
from phonenumbers import carrier
import phonenumbers

cn_number = phonenumbers.parse("18190478611", "CN") # "CN"地区代码表示中国

# 电话号码的省和城市
city = geocoder.description_for_number(cn_number, "zh") # "zh"描述语言表示中文简体
# 电话号码的运营商
carrier = carrier.name_for_number(cn_number, "zh") # "zh"描述语言表示中文简体
print(city,carrier)

执行结果:

四川省德阳市 中国电信

这个库的优点是一直在更新,但相对来说他把省和城市是合在一起的,需要我们自己去做一个拆分。

不过我们在以前也介绍过如何将地址拆分成省、市、区信息。

免费API接口

对于上面的库,如果还有查不到的情况,我们可以使用下面的免费接口代替:

import requests
import json

def parse_phone(phone_number):
    url = 'https://cx.shouji.360.cn/phonearea.php?number=%s' % phone_number
    response = requests.get(url)
    json_str = json.loads(response.text)
    return json_str['data']

data = parse_phone('18080073070')
print(data)
{'province': '四川', 'city': '成都', 'sp': '电信'}

这个 360 的接口,同样可以解析出省、市、运营商的信息。

通过三种解析电话号码归属地的方式,我们可以获取到地理位置信息,从而可以进一步去分析终端消费者的地域分布。

这对于 IPO 的项目的 IT 审计来说,应该是实用的。