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

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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 正则表达式到底是什么东西?字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等...
    狮子挽歌阅读 2,134评论 0 9
  • 一、获取中国目前三大运营商的手机号码段手机号码段链接http://www.gouhaowang.com/xuanh...
    梦蓝蓝的阅读 4,447评论 0 21
  • tags: 正则表达式categories: JavaScript欢迎点击我的博客原文 前端会遇到很多字符串验证问...
    浅茉Sara阅读 754评论 1 2
  • 为什么要做这件事 做事情总得有些理由才能持久的执行下去,因为最近学习html5语言,常规使用的很多信息需要表单来进...
    TsingQue阅读 2,121评论 0 8
  • 今天是什么日子 起床:6点 就寝:10点 天气:阴,有雷 心情:平静 纪念日:就今天,开始写晨间日记 任务清单 改...
    言一一2012阅读 71评论 0 1