查看原文
其他

老板丢给我一堆电话号码,让我挨个进行归属地、运营商查询

IT服务圈儿 2022-09-11

The following article is from 脚本之家 Author 黄同学

IT服务圈儿

有温度、有态度的IT自媒体平台


来源:脚本之家


作者 | 黄同学

出品 | 脚本之家(ID:jb51net)

本文目录

1、写作目的  

2、判断电话号码是否合法

1)移动、联通、电信号段说明   2)python脚本  3、电话号码的归属地查询  

1) phone模块的安装与导入   

2) python脚本

4、案例说明
01
写作目的

本文的写作目的,是基于我同学的一个业务需求,当时他领导丢给他一个表格,里面有很多电话号码,有的知道号码的归属地,有的不知道号码的归属地,然后让他将表格“归属地”这一栏补充完整。于是,我就写了这个文章。
说明:本文涉及到的一切电话号码,纯属杜撰,如果雷同,纯属雷同。02
判断电话号码是否合法


这里我们不做太过详细、全面的判断,我们就从如下几个方面进行判断,满足如下要求,就判定该号码合法,否则就认为该号码不合法。① 号码长度是否合法(大陆正常来说,号码是11位);② 号码是否都是数字,如果都是数字,前三位数字是否满足“移动”、“联通”、“电信”的号段;

某个号码同时满足上述①②要求,我们就认为该号码是合法的。

1)移动、联通、电信号段说明
你可以会有疑问,什么是“号段”?其实当你看了下面的解释后会很明白,没个电话号码前三位就属于一个号段,三大运营商,不同的 运营商有自己不同的号段,只有号段正确,才算是一个正确的电话号码。
  • 移动:130,131,132,155,156,185,186,145,176
  • 联通:134, 135 , 136, 137, 138, 139, 147, 150, 151, 152, 157, 158, 159, 178, 182, 183, 184, 187, 188
  • 电信:133,153,189
2)python脚本
  1. phone_prefix = ['130','131','132','155','156','185','186','145','176','134','135','136','137','138','139','147','150','151','152','157','158','159','178','182','183','184','187','188','133','153','189']

  2. def phone_check(phone_num):

  3. if len(phone_num) != 11:

  4. print("电话号码非法的,长度应该是11位!")

  5. else:

  6. if phone_num.isdigit():

  7. if phone_num[:3] in phone_prefix:

  8. print("电话号码是合法的")

  9. else:

  10. print("电话号码是非法的,号码前三位不是合法的号段!")

  11. else:

  12. print("电话号码应该全部由数字构成!")


  13. phone_list = ["15826829441","14445263125","15631243768","18677281435","16614256432"]

  14. for i in phone_list:

  15. phone_check(i)

结果如下:

03
电话号码的归属地查询

经过上述的判断:对于合法的号码,我们需要进行电话号码的归属地查询;对于不合法的号码,直接显示无效号码即可。
1) phone模块的安装与导入
完成本文需求,需要安装此模块,安装方法如下。使用该模块需要特别注意的是,使用该模块进行电话号码的判断,一定要实现判断该电话号码是否合法,只有合法的电话号码,才能用于归属地查询。
  1. # phone模块的安装

  2. pip install phone

  3. # phone模块的导入

  4. from phone importPhone

2) python脚本
  1. from phone import Phone


  2. def get_phone_info(phone_num):

  3. phone_info = Phone().find(phone_num)

  4. try:

  5. phone = phone_info['phone']

  6. province = phone_info['province'] #所在省份

  7. city = phone_info['city'] #所在城市

  8. zip_code = phone_info['zip_code'] #所在城市邮编

  9. area_code = phone_info['area_code'] #所在城市区号

  10. phone_type = phone_info['phone_type'] #号码运营商

  11. except:

  12. print('无效号码')

  13. return phone, province, city, zip_code, area_code, phone_type

结果如下:

04
案例说明

上表是我自己杜撰的一些电话号码,我们利用上述介绍的方法,先对号码进行挨个的判断,如果电话号码合法,我们再进行电话号码的归属地查询。
  1. from phone import Phone

  2. import pandas as pd


  3. def phone_check(phone_num):

  4. if len(phone_num) != 11:

  5. return "电话号码非法的,长度应该是11位!"

  6. else:

  7. if phone_num.isdigit():

  8. if phone_num[:3] in phone_prefix:

  9. return "电话号码是合法的"

  10. else:

  11. return "电话号码是非法的,号码前三位不是合法的号段!"

  12. else:

  13. return "电话号码应该全部由数字构成!"


  14. def get_phone_info(phone_num):

  15. phone_info = Phone().find(phone_num)

  16. try:

  17. phone = phone_info['phone']

  18. province = phone_info['province'] #所在省份

  19. city = phone_info['city'] #所在城市

  20. zip_code = phone_info['zip_code'] #所在城市邮编

  21. area_code = phone_info['area_code'] #所在城市区号

  22. phone_type = phone_info['phone_type'] #号码运营商

  23. except:

  24. print('无效号码')

  25. return phone, province, city, zip_code, area_code, phone_type


  26. phone_prefix = ['130','131','132','155','156','185','186','145','176',

  27. '134','135','136','137','138','139','147','150','151',

  28. '152','157','158','159','178','182','183','184','187',

  29. '188','133','153','189']


  30. df = pd.read_excel(r"G:Tipdmpython办公自动化查看电话号码运营商,归属地电话号码.xlsx")

  31. df["电话号码"] = df["电话号码"].astype(str)

  32. df["号码是否合法"] = df["电话号码"].apply(phone_check)

  33. # 注意:下面这个列表解析时可能有点复杂,好好体会一下。

  34. df["省份"] = [get_phone_info(df["电话号码"][i])[1] if element == "电话号码是合法的" else "号码无效" for i,element in enumerate(df["号码是否合法"])]

  35. df["城市"] = [get_phone_info(df["电话号码"][i])[2] if element == "电话号码是合法的" else "号码无效" for i,element in enumerate(df["号码是否合法"])]

  36. df["邮编"] = [get_phone_info(df["电话号码"][i])[3] if element == "电话号码是合法的" else "号码无效" for i,element in enumerate(df["号码是否合法"])]

  37. df["区号"] = [get_phone_info(df["电话号码"][i])[4] if element == "电话号码是合法的" else "号码无效" for i,element in enumerate(df["号码是否合法"])]

  38. df["运营商"] = [get_phone_info(df["电话号码"][i])[5] if element == "电话号码是合法的" else "号码无效" for i,element in enumerate(df["号码是否合法"])]

  39. df

结果如下:

写的不错?赞赏一下

长按扫码赞赏我





*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存