验证电话号码合理性,电话号码验证合理性,电话号码合理性验证。

XP_Print 2009-12-12 09:07:36

如题。
请用脚趾头思考一下。不要随便说3-8或者4-7之类。

要求:
1、兼容中国大陆所有座机、手机、小灵通。
2、特殊号码验证为不合理,如:110、119、10086、12315、95512等。
3、认为不合理的号码:400、800等。
4、手机号码13x、013x均合理,186x、188x、189x合理,但是185、187等为不合理。
5、座机号码010x合理,0010x不合理。
6、部分地区座机号码4-8格式也认为合理。

总之一句话:验证号码的真实合理性,而非理论合理性,越真实越好。
这个要求很BT,但是很实用。
...全文
257 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ybh37 的回复:]
引用 12 楼 patrickkong 的回复:
不建议在程序了如此判断。
存到数据库或文件里。
如果号码加了,老要改程序。

就应该这么做!
[/Quote]
“判断”肯定是在程序中,但“判断依据”应该在外部文件中(数据库或自定义数据文件)。
XP_Print 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 chen8013 的回复:]
严格说来,都无法从‘理论上’判断一个号码是否合法。

要比较准确,恐怕得完整地搜集全国的 长途区号 和 相应的固话号码段了。
[/Quote]

全国的区号也不是很多,可能几百个吧,手机号段也就几十个。

If 串长 = 12 Then '一定是 4-8 格式
取前4位查表,后8位就算了
Else
取前3位查表,第4位也忽略得了
End If

这样应该就可以了。
舉杯邀明月 2009-12-13
  • 打赏
  • 举报
回复
严格说来,都无法从‘理论上’判断一个号码是否合法。

要比较准确,恐怕得完整地搜集全国的 长途区号 和 相应的固话号码段了。

无·法 2009-12-13
  • 打赏
  • 举报
回复
貌似有点复杂,高分之下必有勇夫
XP_Print 2009-12-13
  • 打赏
  • 举报
回复
If 串长 = 12 Then '一定是 4-8 格式
取前4位查表,后8位,实在难以验证了
Else '可能是 3-8 也可能是 4-7
取前3位查表,考虑到 4-7 格式实际上是 3-8 的延申,只验证前3位也没什么问题
End If
  • 打赏
  • 举报
回复
脖子很硬。
121 向左歪歪,121,向右歪歪。
XP_Print 2009-12-13
  • 打赏
  • 举报
回复
如果把手机号码也看作是一种 3-8 格式,可以同座机号一起验证。
那么,就只需要解决 3-8 4-7 4-8 的问题就可以了。
XP_Print 2009-12-13
  • 打赏
  • 举报
回复
在10楼分析手机号码时,可以简化一下。

取前三个字母StrLeft3
If Instr("|130|131|132|133|134|135|136|137|138|139| _
150|151|158|159|186|188|189|", "|" & StrLeft3 & "|") Then 合理
XP_Print 2009-12-13
  • 打赏
  • 举报
回复
If 首字母 = "1" Then '必须是手机号码才有可能合理
验证是否是合理的手机号码
ElseIf 首字母 = "0" Then
先假设是座机号码分析其合理性
再去掉首字母,分析是否是外地手机号码
Else
首字母除了"0"和"1",其它号码均认定为不合理。
End If
XP_Print 2009-12-12
  • 打赏
  • 举报
回复
Google正则表达式3-8、4-7满天飞,除此之外找不到别的了。
请教高手。
soliddream66 2009-12-12
  • 打赏
  • 举报
回复
用正则表达式吧

咸清 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 patrickkong 的回复:]
不建议在程序了如此判断。
存到数据库或文件里。
如果号码加了,老要改程序。
[/Quote]
就应该这么做!
舉杯邀明月 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 patrickkong 的回复:]
不建议在程序了如此判断。
存到数据库或文件里。
如果号码加了,老要改程序。
[/Quote]
Ding ...........

用这种方式可以应对复杂情况。
Jeff_youzi 2009-12-12
  • 打赏
  • 举报
回复
来学习了。
  • 打赏
  • 举报
回复
不建议在程序了如此判断。
存到数据库或文件里。
如果号码加了,老要改程序。
XP_Print 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ybh37 的回复:]
在一个文件或者库里把正确的按地区分组写好,剩下的只需判断位数和是不是数字就OK了
[/Quote]
请不要在位数和是否纯数字等基础问题上面纠缠。
XP_Print 2009-12-12
  • 打赏
  • 举报
回复
If 首字母 = "1" Then '如果合理,只能是手机号码
If 号码长度 <> 11 Then '手机号码一定是11位数
不合理,结束判断
End If
If 次字母 = "3" Then '13x号段都是存在的
合理,结束判断
ElseIf 次字母 = "5" Then '目前只发现150、151、158、159号段
Select Case 第三个字母
Case "0", "1", "8", "9"
合理,结束判断
Case Else
不合理,结束判断
End Select
ElseIf 次字母 = "8" Then '目前只发现186、188、189号段
Select Case 第三个字母
Case "6", "8", "9"
合理,结束判断
Case Else
不合理,结束判断
End Select
else '目前只有13x、15n、18n号段是手机号码,其它一概认为不合理
不合理,结束判断
end if
end if '首字母不是"1"的情况比较复杂,可以是座机,也可以是外地手机。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xp_print 的回复:]
引用 5 楼 patrickkong 的回复:
我们是把正确的正则表达式放到数据库了。
输入是判断是不是符合。
省的改程序,号码的范围总是在加的。

我的问题,能写出表达式吗。
[/Quote]
看你用什么正则表达式了。
我们用的unix的。
vb里楼上的也可
咸清 2009-12-12
  • 打赏
  • 举报
回复
在一个文件或者库里把正确的按地区分组写好,剩下的只需判断位数和是不是数字就OK了
XP_Print 2009-12-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 patrickkong 的回复:]
我们是把正确的正则表达式放到数据库了。
输入是判断是不是符合。
省的改程序,号码的范围总是在加的。
[/Quote]
我的问题,能写出表达式吗。
加载更多回复(4)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧