手机号归属地查询实例

简介: 手机号归属地查询实例

背景


最近有个需求,需要使用查询手机号归属地,进行客户地区统计分析。


思路


方案1


首先想到的是找第三方的api接口,直接根据手机号调用. 网上有很多,比如360的。

弊端: 这些有的收费的,有的个数限制的,而且批量查询调的确是很费劲的。


方案2


想到能不能找到一个手机号归属地的数据库字典,比如excel等。我们保存到自己的数据库或服务器中,去一行行解析呢。的确网上也是有这种方案的。


弊端: 自己维护数据库字典,自己写的查询效率不知如何。


方案3:


感谢大神们的分享精神,找到一个开源项目,他直接给把字典和查询给封装成了jar包,打到了maven中央仓库,我们只要引用jar就可以了。顺着这个思路,找到了网上有很多实现,都是基于那位大神的项目做得封装。比如java 的,go语言的,python等。


https://gitee.com/oss/phonedata?_from=gitee_search

1dc618a0ed9580ce8bfa6facb208c08f.png


实战


本人就基于第三种方案实现。具体看下面的方式:


1.引入jar包

<dependency>
   <groupId>me.ihxq.projects</groupId>
   <artifactId>phone-number-geo</artifactId>
   <version>1.0.9-202108</version>
</dependency>


2.测试使用

@Test
    public void testPhone(){
        PhoneNumberLookup phoneNumberLookup1 = new PhoneNumberLookup();
        String province = phoneNumberLookup1.lookup("13565403278")
                .map(PhoneNumberInfo::getAttribution)
                .map(Attribution::getProvince)
                .orElse("未知");
        log.info(province);
        PhoneNumberLookup phoneNumberLookup = new PhoneNumberLookup();
        PhoneNumberInfo found = phoneNumberLookup.lookup("13565403278").orElseThrow(RuntimeException::new);
        found.getNumber(); // 18798896741
        found.getAttribution().getProvince(); // 贵州
        found.getAttribution().getCity(); // 贵阳
        found.getAttribution().getZipCode(); // 550000
        found.getAttribution().getAreaCode(); // 0851
        found.getIsp(); // ISP.CHINA_MOBILE
        log.info(JSON.toJSONString(found));
    }


运行结果如下:

5d4c6812c8535adbb050f4ddf2e1bce8.png


3.项目中使用

比如我有个小需求,根据用户登录过app的手机号,进行数据大屏展示。就可以直接这样用。


/** 
     * 1.查询当日登录过用户
     * 2.基于当日登录用户的手机号,获取手机号对应的归属地
     * 返回数据结果
     */
    @Override
    public  List<PhoneProvinceDTO>  statisticsUserMap() {
        //获取今日日期
        String day = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        //获取今日登陆过的 所有用户手机号
        List<String> todayLoginUserPhones = this.baseMapper.getTodayLoginUserPhones(day);
        List<PhoneProvinceDTO> list = new ArrayList<>();
        todayLoginUserPhones.parallelStream().forEach(item -> {
            PhoneProvinceDTO phoneProvinceDTO = new PhoneProvinceDTO();
            //调用手机号归属地的工具方法
            PhoneNumberLookup phoneNumberLookup = new PhoneNumberLookup();
            String province = phoneNumberLookup.lookup(item)
                    .map(PhoneNumberInfo::getAttribution)
                    .map(Attribution::getProvince)
                    .orElse("未知");
            phoneProvinceDTO.setProvince(province);
            list.add(phoneProvinceDTO);
        });
        if (CollectionUtils.isEmpty(list)){
            return Collections.emptyList();
        }
        //分组统计今日登陆过的 省份人数
        Map<String, List<PhoneProvinceDTO>> groupMap = list.parallelStream().collect(Collectors.groupingBy(PhoneProvinceDTO::getProvince));
        //定义返回的集合对象
        List<PhoneProvinceDTO> resultList = new ArrayList<>();
        groupMap.forEach((k, v) -> {
            PhoneProvinceDTO dto = new PhoneProvinceDTO();
            int size = v.size();
            dto.setProvince(k);
            dto.setCount(size);
            resultList.add(dto);
        });
        if (CollectionUtils.isEmpty(resultList)){
            return Collections.emptyList();
        }
       //重写了Comparable 进行倒序排序
        Collections.sort(resultList);
        return resultList;
    }


这样就直接拿到了所有的登录人省份,进行数据分析了!!!

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

特别提醒


目前:这个手机号库是21年8月份更新,如果后续更新了,跟着替换下jar的版本即可。如果等不及,也可以继续找最新的手机号库源,定时同步,自己封装sprinboot-start奥,然后调用奥。


相关文章
|
2月前
|
API
查询城市手机号段免费API接口教程
此API用于查询指定城市的手机号段、服务商、区号、邮编等信息。支持POST或GET请求,需提供用户ID、KEY及城市名称等参数。返回数据包括状态码、信息提示、查询数量、最大页码、当前页码、省份、城市、区号、邮编、区划代码及数据集等。示例中提供的ID和KEY为公共测试用,建议使用个人ID和KEY以获得更高的调用频率。
|
2月前
|
API
手机号段查询城市免费API接口教程
此接口用于根据手机号段查询相关信息,包括城市、运营商、区号等。支持POST和GET请求,需提供用户ID、KEY及手机号段前7位作为参数。返回数据包含状态码、信息提示及详细归属信息。示例请求地址:https://cn.apihz.cn/api/ip/haoduan.php?id=88888888&key=88888888&numbers=1321993。接口免费,建议使用个人ID与KEY以独享调用频次。
|
2月前
|
API
查手机号归属地免费API接口教程
此API用于查询指定手机号码的归属地信息,包括号段、省份、城市、运营商等。支持POST和GET请求方式,需提供用户ID、KEY及手机号作为参数。返回结果包含状态码、信息提示及详细归属地信息。示例请求地址:https://cn.apihz.cn/api/ip/shouji.php?id=88888888&key=88888888&phone=13219931963。
|
8月前
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
本文介绍了如何批量快速查询手机号码归属地并进行分类。首先,通过提供的百度网盘或腾讯云盘链接下载免费查询软件。其次,开启软件,启用复制粘贴功能,直接粘贴号码列表并选择高速查询。软件能在极短时间内(如1.76秒内)完成40多万个号码的查询,结果包括归属地、运营商、邮箱和区号,且数据准确。之后,可直接导出数据至表格,若数据超过100万,可按省份、城市及运营商分类导出。文章还附带了操作动画演示,展示全程流畅的处理大量手机号码归属地查询的过程。
409 0
分享:2秒快速查询40万手机号码归属地,批量手机号码归属地查询可以导出excel表格,WPS表格查询手机号码归属地怎么操作,批量手机号码归属地批量查询软件,批量号码查询按省份和城市分类,按运移动号码电信号码联通号码分类整理
|
8月前
|
数据可视化 Java 数据挖掘
手机号归属地查询实例
手机号归属地查询实例
241 0
|
8月前
|
C# 索引
C# | 【完全开源】手机号码归属地查询,一秒内百万次查询
这个开源项目是一个.NET库,可以通过手机号码获取号码归属地信息,包括运营商、国家、省份、城市、邮政编码、区号等信息。 该库加载了一个包含46万条数据的“中国手机号归属地信息”数据集,并实现了高速查询。在我的7年老笔记本上执行一百万次查询耗时不足一秒。
344 0
|
数据挖掘 API
手机在网状态API 查询功能分析
手机在网状态API 查询功能分析
185 1
|
JavaScript 前端开发 搜索推荐
HTML+JS 实现手机号码归属地查询功能
HTML+JS 实现手机号码归属地查询功能
325 0
HTML+JS 实现手机号码归属地查询功能
|
XML JSON 搜索推荐
一文轻松掌握手机号码归属地的的应用技巧
手机号码归属地API为我们提供了一种快速、准确获取手机号码归属地信息的工具。它在电信、电商、市场营销和金融等领域具有广泛的应用前景。随着技术的不断进步,手机号码归属地API将为我们带来更多便利和实用性,为我们的生活和工作带来更多的便利和效率。
291 0
|
7月前
|
网络协议 Android开发 数据安全/隐私保护
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
5190 2

热门文章

最新文章