坑爹代码 | 要不然你说手机号码应该怎么验证嘛!

来源: OSCHINA
编辑: 红薯
2019-06-25

在现如今的互联网应用中,手机号码已经完全取代电子邮件成为了用户注册账号的唯一标识。而随着移动网络的高速发展,各种前缀的手机号码不断推出,如何验证有效的手机号码就是程序员必须关注的功能点,你说重要吧? 好像没那么重要,你说不重要吧? 一旦程序出错,用户注册不了那就是大事!

所以你怎么看下面这段验证手机号码是否正确的代码呢?

public String validatePhone(String phoneStr) {
  if (phoneStr != null) {
	if (phoneStr.length() == 11) {
	  if (isNumeric(phoneStr)) {
		if (phoneStr.startsWith("130") || phoneStr.startsWith("131") || phoneStr.startsWith("132")
			|| phoneStr.startsWith("134") || phoneStr.startsWith("135") || phoneStr.startsWith("136")
			|| phoneStr.startsWith("137") || phoneStr.startsWith("138") || phoneStr.startsWith("139")
			|| phoneStr.startsWith("140") || phoneStr.startsWith("141") || phoneStr.startsWith("142")
			|| phoneStr.startsWith("144") || phoneStr.startsWith("145") || phoneStr.startsWith("146")
			|| phoneStr.startsWith("147") || phoneStr.startsWith("148") || phoneStr.startsWith("149")
			|| phoneStr.startsWith("150") || phoneStr.startsWith("151") || phoneStr.startsWith("152")
			|| phoneStr.startsWith("154") || phoneStr.startsWith("155") || phoneStr.startsWith("156")
			|| phoneStr.startsWith("157") || phoneStr.startsWith("158") || phoneStr.startsWith("159")
			|| phoneStr.startsWith("170") || phoneStr.startsWith("171") || phoneStr.startsWith("172")
			|| phoneStr.startsWith("174") || phoneStr.startsWith("175") || phoneStr.startsWith("176")
			|| phoneStr.startsWith("177") || phoneStr.startsWith("178") || phoneStr.startsWith("179")
			|| phoneStr.startsWith("180") || phoneStr.startsWith("181") || phoneStr.startsWith("182")
			|| phoneStr.startsWith("184") || phoneStr.startsWith("185") || phoneStr.startsWith("186")
			|| phoneStr.startsWith("187") || phoneStr.startsWith("188") || phoneStr.startsWith("189")) {
			return "手机号正确";
		  } else {
			return "手机号规则错误";
		  }
		} else {
		  return "手机号必须为数字";
		}
	} else {
		return "手机号长度必须为11位";
	}
  } else {
	return "手机号不能为空";
  }
}

逻辑好像没有问题,但是真的好啰嗦啊!!!

那么你有更好的方法吗?

请移步下面链接发表评论,领取奖品:

https://gitee.com/oschina/bullshit-codes/blob/master/java/PhoneRuleValidate.java

码云 6 周年,我们正在征集各种坑爹代码,很多奖品等你来拿

详细的参与方法请看  https://gitee.com/oschina/bullshit-codes

------ 分割线 ------

其他坑爹代码吐槽:

展开阅读全文
9 收藏
分享
加载中
精彩评论
验证1开头的11位数字得了,反正有短信验证。。。
2019-06-25 08:51
18
举报
把开头3个字母放到hashset里面,看看用户输入的号码,前面3位在不在set里面,不在,就是非法的
2019-06-25 09:00
9
举报
为什么没有133开头的,难道我们133的就不能是手机用户吗,就不配拥有姓名吗?
2019-06-25 10:20
8
举报
我看过的牛逼写法,lua写的,其他同理。
FOO.isMobile = function( s_ )
  local n_ = tonumber(s_) or 0
  return (n_>13000000000 and n_<19999999999)
end
2019-06-26 10:28
6
举报
首先,这个代码缩进,我给0分.
2019-06-25 12:42
6
举报
最新评论 (40)
现在手机号验证真不好弄,一般都是判断1开头的11位数。但是,对于那种非大路货就不好使了。
2019-06-29 17:31
0
回复
举报
没手机号码的,怎么注册?在网上证明我是“我”怎么那么难?
2019-06-28 21:28
0
回复
举报
看的头疼
2019-06-27 17:36
0
回复
举报
手机号会回收利用的,长点心吧海燕
2019-06-26 13:01
0
回复
举报
我看过的牛逼写法,lua写的,其他同理。
FOO.isMobile = function( s_ )
  local n_ = tonumber(s_) or 0
  return (n_>13000000000 and n_<19999999999)
end
2019-06-26 10:28
6
回复
举报
@贾一饼 这个屌
2019-06-28 00:17
0
回复
举报
虚拟号段开放后,号段无限多,其实除了 10 11 12 开头,其余1开头总长度11位的数字即可
2019-06-25 22:01
1
回复
举报
16x 19x的用户就不管吗?
2019-06-25 21:48
1
回复
举报
0分
2019-06-25 20:21
0
回复
举报
正则表达式
2019-06-25 20:04
0
回复
举报
建一个60元素的数组,把手机号前三位转成数字减130,然后作为索引号,查数组元素值
2019-06-25 19:21
0
回复
举报
更多评论
44 评论
9 收藏
分享
返回顶部
顶部