很显然 是你得正则表达式不对啊,正确的18位身份证验证正则为:
String regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"而且就算正则表达式正确了,你的逻辑判断代码也是有问题,
完成代码如下,请参考:
public class Homework {public static void main(String[] args) {
String regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"
System.out.println("请输入18位的身份证号码:")
Scanner scanner = new Scanner(System.in)
String s = scanner.nextLine()
if (s.matches(regex)) {
int y1, y2
String year1 = s.substring(6, 8)
y1 = Integer.parseInt(year1)
String year2 = s.substring(8, 10)
y2 = Integer.parseInt(year2)
if ((y1 == 18 && y2 >= 87 && y2 <= 89)
|| (y1 == 19 && y2 >= 0 && y2 <= 99)
|| (y1 == 20 && y2 <= 17)) {
int m, d
String month = s.substring(10, 12)
m = Integer.parseInt(month)
String day = s.substring(12, 14)
d = Integer.parseInt(day)
if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
&& (d == 31))
System.out.println("有效")
else if ((m == 4 || m == 6 || m == 9 || m == 11) && (d == 30))
System.out.println("有效")
else if (m == 2) {
int y
String year = s.substring(6, 10)
y = Integer.parseInt(year)
if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
&& (d == 29))
System.out.println("有效")
else if (((y % 4 != 0 && y % 100 == 0) || y % 400 != 0)
&& (d == 28))
System.out.println("有效")
else
System.out.println("无效")
return
} else {
System.out.println("无效")
return
}
int ss
String sex = s.substring(16, 17)
ss = Integer.parseInt(sex)
if (ss % 2 == 0)
System.out.println("女性")
else
System.out.println("男性")
} else
System.out.println("无效")
} else
System.out.println("无效")
}
}
^ 匹配字符串的开始[1-9] 第1位:1-9
\d{5} 第2-6位:0-9
[1-9] 第7位:1-9
\d{3} 第8-10位:0-9
((0\d)|(1[0-2])):
第11-12位:(00-09)或(10-12)
(([0|1|2]\d)|3[0-1])
第13-14位:(00-29)或(30-31)
\d{3} 第15-17位:0-9
([0-9]|X)
第18位:0-9或X
$ 匹配字符串的结束
这个是正则表达式,给你段代码,你自己琢磨吧!//正则表达式 校验是否存在非法字符
private String checkPattern(String str){
String len
String regEx="[`~!@#$%^&*()+=|{}':',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"
Pattern p = Pattern.compile(regEx)
Matcher m = p.matcher(str)
len=m.replaceAll("").trim()
return len
}