美文网首页PythonPython学习手册
正则表达式Python案例(1)-中国大陆手机号码验证

正则表达式Python案例(1)-中国大陆手机号码验证

作者: 复苏的兵马俑 | 来源:发表于2020-03-07 21:43 被阅读0次

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()

相关文章

  • 常见正则应用

    在需要手机登录,验证等场景时,需要先在前端对输入手机号码进行验证! 示例1 正则表达式验证手机号码是否正确 验证的...

  • iOS开发中的一些常用小技巧

    1. 判断手机号码格式是否正确,利用正则表达式验证 2. 判断邮箱格式是否正确,利用正则表达式验证 3. 让iOS...

  • 正则表达式Python案例(1)-中国大陆手机号码验证

    1、基础运营商手机卡(Base Operator) A)支持语音通话、短信、数据流量;B)号码长度为 11 位。 ...

  • 正则式随笔

    验证手机号码 正则表达式对手机号的验证^[1][3-8]+\d{9}^首字母[1]必须是1,方格可以去掉吧。。[3...

  • Swift中常用的正则表达式

    1、手机号码验证 移动号正则表达式: 联通号正则表达式: 电信号正则表达式: 移动、联通、电信手机号通用表达式: ...

  • 2.8正则表达式考察点

    至少写出一种验证139开头的11为的手机号码的正则表达式 思考手机号码的正则表达式的编写延伸正则表达式的组成及编写...

  • 正则表达式收集

    手机号码验证:/^1[34578]\d{9}$/

  • 2019-07-16

    验证手机号码输入 'phone' => 'required|regex:/^1[...

  • 常用的Js正则表达式 实名验证+身份验证+手机验证+汉字限制

    手机号码验证 JS正则表达式验证身份证号码 最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高...

  • 正则表达式

    最近学习正则表达式,留下读书笔记,以备查阅。 作用 数据验证,例如验证一串字符串中是都包含手机号码、信用卡号码等;...

网友评论

    本文标题:正则表达式Python案例(1)-中国大陆手机号码验证

    本文链接:https://www.haomeiwen.com/subject/uughdhtx.html