在处理用户手机号时,经常需要查询手机号归属地、手机号所属运营商,有时还需要对手机号进行脱敏处理隐藏中间4位。查询归属地和运营商,需要一个号段数据库表,自己去维护这个表显然不现实,省事的办法是购买付费查询服务或使用公开的查询接口,付费的话这个不在考虑范围内了,本着多快好省的原则,在网上搜索一番,很多免费的要么是停了要么是很慢。
本人平时个别查询时习惯使用ip138这个工具网站,速度很快,于是研究了下它的查询接口,有提供一个付费API,它自己网页上使用的API直接拿来用又会遇到跨域而不是直接使用,只能一条条的查询,而excel功能中的WEBSERVICE函数正好可以读取网络数据,那使用excel批量查询,然后抽取所需数据,是不是就可以了,经过一番测试,成功拉取到了手机号归属地和手机运营商信息。(注:手机号前3位为运营商标识、4-7位为归属地号段)
步骤1:找到一个方便处理的查询入口
在ip138上选择吉凶(感觉就这个直接),
点开后得到一个查询页面地址【 https://jx.ip138.com/13800138000
】,查看页面源码能看到归属地信息如图
于是找到excel表所用的查询接口,在B2单元格输入公式【 ="https://jx.ip138.com/"&A2
】并下拉填充,如下图
步骤2:查看结果页面源码
使用excel获取查询页面源码,在excel表C2单元格输入获取网络数据的公式【 =WEBSERVICE(B2)
】,回车后可以看到C2已获取到B2地址的源码,下拉填充(注意:excel表获取的源码可能和直接查看网页源码不一样,以excel获取的为准)
步骤3:分析源码比并截取所需信息
将C2单元格的源码直接复制到TXT文档下查看,找到号码归属地相关代码:
<tr class=""only-pc"">
<td class=""th"" width=""21%""><p>您的号码</p></td>
<td width=""21%""><p>13800138000</p></td>
<td class=""th"" width=""21%""><b>归属地:</b></td>
<td width=""37%"">北京 移动全球通卡<a href=""//www.ip138.com/mobile.asp?action=mobile&mobile=13800138000"" target=""_blank"">点此查询专业手机归属地</a></td>
</tr>
利用excel的substitute函数进行处理,在D2单元格输入:【 =SUBSTITUTE(SUBSTITUTE(C2,LEFT(C2,FIND("37%",C2)+4),),SUBSTITUTE(C2,LEFT(C2,FIND("点此查询专业手机归属地",C2)-87),),)
】,回车后截取查询结果输出在D2里,下拉填充(注意:需要找到 北京 移动全球通卡
前后的唯一值进行定位截取,使用时注意excel获取的源码是否有变化,目前公式是从【 37%
】之后的第4个字符开始,到【 点此查询专业手机归属地
】前87个字符止)结果如下图
步骤4:隐藏手机号中间4位
方法很多,使用【 =REPLACE(A2,4,4,"****")
】或【 =SUBSTITUTE(A2,MID(A2,4,4),"****",1)
】都可以
附录:也可以直接编辑运营商标识进行查询
如在G2单元格输入公式:【 =IF(OR(--LEFT(A2,3)={134,135,136,137,138,139,142,143,144,147,148,150,151,158,159,157,154,152,172,178,188,187,182,183,184,198}),"移动",IF(OR(--LEFT(A2,3)={130,131,132,140,145,146,155,156,166,185,186,175,176}),"联通",IF(OR(--LEFT(A2,3)={133,149,153,189,180,181,177,173,174,190,191,197,193,199}),"电信",IF(OR(--LEFT(A2,4)={1705,1703,1706}),"移动",IF(OR(--LEFT(A2,4)={1707,1708,1709,1713,1715,1716,1717,1718,1719,1712,1704}),"联通",IF(OR(--LEFT(A2,4)={1700,1701,1702}),"电信"))))))
】 回车即可查到该号码所属的运营商,下拉填充
这个的优势是安全、快速。缺点是需要自己的维护在公式里的参数