1、基础运营商手机卡(Base Operator)
A)支持语音通话、短信、数据流量;
B)号码长度为 11 位。
中国移动号段:134[0-8],13[5-9],15[0-2,7-9],172,178,18[2-4,7-8],19[5,7,8]
正则表达式:^1(?:34[0-8]|3[5-9]\d|5[0-2,7-9]\d|7[28]\d|8[2-4,7-8]\d|9[5,7,8]\d)\d{7}$
中国联通号段:130,131,132,155,156,166,175,176,185,186,196
正则表达式:^1(?:3[0-2]|[578][56]|66|96)\d{8}$
中国电信号段:133,153,173,177,180,181,189,19[0,1,3,9]
正则表达式:^1(?:33|53|7[37]|8[019]|9[0139])\d{8}$
中国广电号段:192
正则表达式:^1(?:92)\d{8}$
基础运营商手机卡:中国移动号段、中国联通号段、中国电信号段、中国广电号段
正则表达式:^1(?:34[0-8]|3[5-9]\d|5[0-2,7-9]\d|7[28]\d|8[2-4,7-8]\d|9[5,7,8]\d|3[0-2]\d|[578][56]\d|66\d|96\d|33\d|53\d|7[37]\d|8[019]\d|9[0139]\d|92\d)\d{7}$
2、虚拟运营商手机卡(Virtual Network Operator)
A)支持语音通话、短信、数据流量;
B)号码长度为 11 位。
中国移动号段:170[3,5,6],165
正则表达式:^1(?:70[356]|65\d)\d{7}$
中国联通号段:170[4,7-9],171,167
正则表达式:^1(?:70[4,7-9]|71\d|67\d)\d{7}$
中国电信号段:170[0-2],162
正则表达式:^1(?:70[0-2]|62\d)\d{7}$
虚拟运营商手机卡:中国移动号段、中国联通号段、中国电信号段
正则表达式:^1(?:70[356]|65\d|70[4,7-9]|71\d|67\d|70[0-2]|62\d)\d{7}$
基础虚拟运营商+虚拟运营商的手机卡:中国移动号段、中国联通号段、中国电信号段、中国广电号段
正则表达式:^1(?:34[0-8]|3[5-9]\d|5[0-2,7-9]\d|7[28]\d|8[2-4,7-8]\d|9[5,7,8]\d|3[0-2]\d|[578][56]\d|66\d|96\d|33\d|53\d|7[37]\d|8[019]\d|9[0139]\d|92\d|70[356]|65\d|70[4,7-9]|71\d|67\d|70[0-2]|62\d)\d{7}$
3、物联网数据卡(IoT Data Card)
A)支持数据流量;
B)号码长度为 13 位。
中国移动号段:1440,148
正则表达式:^14(?:40|8\d)\d{9}$
中国联通号段:1400,146
正则表达式:^14(?:00|6\d)\d{9}$
中国电信号段:1410
正则表达式:^14(?:10)\d{9}$
4、上网数据卡(Internet Data Card)
A)支持语音通话(部分)、短信、数据流量;
B)号码长度为 11 位。
中国移动号段:147
正则表达式:^1(?:47)\d{8}$
中国联通号段:145
正则表达式:^1(?:45)\d{8}$
中国电信号段:149
正则表达式:^1(?:49)\d{8}$
5、卫星移动通信(Satellite Mobile Communication)
A)支持语音通话、短信、数据流量;
B)号码长度为 11 位。
中国移动号段:1349
正则表达式:^1(?:349)\d{7}$
中国电信号段:1740[0-5]
正则表达式:^1(?:740[0-5])\d{6}$
6、工信部应急通信(MIIT Crisis Communication)
A)支持语音通话、短信、数据流量;
B)号码长度为 11 位。
支持号段:1740[6-9],1741[0-2]
正则表达式:^174(?:0[6-9]|1[0-2])\d{6}$
7、海事卫星通信(Maritime Satellite Communication)
A)支持语音通话、短信、数据流量;
B)号码长度为 11 位。
支持号段:1749
正则表达式:^1(?:749)\d{7}$
说明:
1)由于携号转网的在部分地区已经试行,对于成功进行携号转网的用户,手机号段不再能体现其当前所属运营商;
2)根据工信部相关文件,145、147、149号段允许提供语音通话功能,运营商可以根据用户需要自主决定是否提供语音通话功能,目前147、149号段已经有支持语音通话的号码卡放出。
Python代码验证:
import re
def isTelphoneNumber(telphone):
if len(telphone) == 11:
if re.match(r"^1(?:749)\d{7}$", telphone):
return 'MSC'
elif re.match(r"^174(?:0[6-9]|1[0-2])\d{6}$", telphone):
return 'MCC'
elif re.match(r"^1(?:349)\d{7}$", telphone):
return 'CM_SMC'
elif re.match(r"^1(?:740[0-5])\d{6}$", telphone):
return 'CT_SMC'
elif re.match(r"^1(?:47)\d{8}$", telphone):
return 'CM_IDC'
elif re.match(r"^1(?:45)\d{8}$", telphone):
return 'CU_IDC'
elif re.match(r"^1(?:49)\d{8}$", telphone):
return 'CT_IDC'
elif re.match(r"^1(?:70[356]|65\d)\d{7}$", telphone):
return 'CM_VNO'
elif re.match(r"^1(?:70[4,7-9]|71\d|67\d)\d{7}$", telphone):
return 'CU_VNO'
elif re.match(r"^1(?:70[0-2]|62\d)\d{7}$", telphone):
return 'CT_VNO'
elif re.match(r"^1(?:34[0-8]|3[5-9]\d|5[0-2,7-9]\d|7[28]\d|8[2-4,7-8]\d|9[5,7,8]\d)\d{7}$", telphone):
return 'CM_BO'
elif re.match(r"^1(?:3[0-2]|[578][56]|66|96)\d{8}$", telphone):
return 'CU_BO'
elif re.match(r"^1(?:33|53|7[37]|8[019]|9[0139])\d{8}$", telphone):
return 'CT_BO'
elif re.match(r"^1(?:92)\d{8}$", telphone):
return 'CBN_BO'
else:
return 'Error'
elif len(telphone) == 13:
if re.match(r"^14(?:40|8\d)\d{9}$", telphone):
return 'CM_IoT'
elif re.match(r"^14(?:00|6\d)\d{9}$", telphone):
return 'CU_IoT'
elif re.match(r"^14(?:10)\d{9}$", telphone):
return 'CT_IoT'
else:
return 'Error'
else:
return 'Error'
def main():
while 1:
tel = input("请输入手机号:")
if tel.upper() == 'Q':
print('查询结束!')
break
else:
result = isTelphoneNumber(tel)
if result == 'Error':
print("你输入的号码不正确,请重新输入!")
elif result == 'MSC':
print('你的号码是海事卫星通信的。')
elif result == 'MCC':
print('你的号码是工信部应急通信的。')
elif result == 'CM_SMC':
print('你的号码是中国移动卫星通信的。')
elif result == 'CT_SMC':
print('你的号码是中国电信卫星通信的。')
elif result == 'CM_IDC':
print('你的号码是中国移动上网数据卡的。')
elif result == 'CU_IDC':
print('你的号码是中国联通上网数据卡的。')
elif result == 'CT_IDC':
print('你的号码是中国电信上网数据卡的。')
elif result == 'CM_VNO':
print('你的号码是中国移动虚拟运营商的。')
elif result == 'CU_VNO':
print('你的号码是中国联通虚拟运营商的。')
elif result == 'CT_VNO':
print('你的号码是中国电信虚拟运营商的。')
elif result == 'CM_BO':
print('你的号码是中国移动的。')
elif result == 'CU_BO':
print('你的号码是中国联通的。')
elif result == 'CT_BO':
print('你的号码是中国电信的。')
elif result == 'CBN_BO':
print('你的号码是中国广电的。')
elif result == 'CM_IoT':
print('你的号码是中国移动物联网数据卡的。')
elif result == 'CU_IoT':
print('你的号码是中国联通物联网数据卡的。')
elif result == 'CT_IoT':
print('你的号码是中国电信物联网数据卡的。')
if __name__ == "__main__":
main()