注意:这里不对地区编码(第4-7位)和用户号码(第8-11位)进行合法性判断!
需要进行哪些判断:
1. 号码是否为11位
2. 号码是否全为数字
3. 号段(前三位)是否合法
手机号段:
移动号段:139 138 137 136 134 135 147 150 151 152 157 158 159 172 178 182 183 184 187 188 195 197 198
联通号段:130 131 132 140 145 146 155 156 166 185 186 175 176 196
电信号段:133 149 153 177 173 180 181 189 191 193 199
虚拟运营商号段:162 165 167 170 171
这里介绍了两种实现方法,一是用列表来实现,二是用正则表达式来实现
列表实现
这种方法对于像我这样的初学者来说很友好,简单易懂
# 号段列表
list1 = [139, 138, 137, 136, 134, 135, 147, 150, 151, 152, 157, 158, 159, 172, 178,
130, 131, 132, 140, 145, 146, 155, 156, 166, 185, 186, 175, 176, 196,
133, 149, 153, 177, 173, 180, 181, 189, 191, 193, 199,
162, 165, 167, 170, 171]
# 键入手机号码
phone = input("请输入11位手机号码")
# len(phone) == 11,判断phone是否为11位
# phone.isnumeric(),判断phone是否全为数字
# int(phone[:3]) in list1,判断phone前三位是否在合法号段列表内
if len(phone) == 11 and phone.isnumeric() and (int(phone[:3]) in list1):
print("手机号码合法!")
else:
print("手机号码非法!")
正则表达式实现
正则表达式强大、便捷、高效,但掌握起来有一定难度
import re
phone = input("请输入11位手机号码:")
pattern = re.compile(r'^(13[0-9]|14[0|5|6|7|9]|15[0|1|2|3|5|6|7|8|9]|'
r'16[2|5|6|7]|17[0|1|2|3|5|6|7|8]|18[0-9]|'
r'19[1|3|5|6|7|8|9])\d{8}$')
if pattern.search(phone):
print("手机号码合法!")
else:
print("手机号码非法!")
更多正则表达式的实现可访问菜鸟教程
如果您喜欢这篇文章就请点赞收藏噢!
如果您发现错误或不足,欢迎在评论区指出噢!