Java校验18位身份证号,不能以0开头,并且末尾是x的身份证号,分别用正则和不用正则方法完成
时间: 2024-04-07 09:32:52 浏览: 96
好的,我来回答你的问题。
1. 使用正则表达式进行校验:
可以使用如下的正则表达式进行校验:
```
^[1-9]\\d{16}[\\d|x|X]$
```
其中:
- `^` 表示匹配字符串开头;
- `[1-9]` 表示第一位不能是 0;
- `\\d{16}` 表示后面 16 位必须是数字;
- `[\\d|x|X]` 表示最后一位可以是数字 0-9 或者大写字母 X;
- `$` 表示匹配字符串结尾。
Java 代码如下:
```java
public static boolean checkIdNumber(String idNumber) {
String regex = "^[1-9]\\d{16}[\\d|x|X]$";
return Pattern.matches(regex, idNumber);
}
```
2. 不使用正则表达式进行校验:
可以使用如下的方法进行校验:
```java
public static boolean checkIdNumber(String idNumber) {
if (idNumber == null || idNumber.length() != 18) {
return false;
}
char[] chars = idNumber.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (i == chars.length - 1) {
// 最后一位可以是数字 0-9 或者大写字母 X
if (chars[i] != 'x' && chars[i] != 'X' && !Character.isDigit(chars[i])) {
return false;
}
} else {
// 第一位不能是 0,其余必须是数字
if (i == 0 && chars[i] == '0') {
return false;
} else if (!Character.isDigit(chars[i])) {
return false;
}
}
}
return true;
}
```
这个方法的实现比较简单,就是对身份证号的每一位进行判断,最后返回是否符合要求。
阅读全文