java判断是否为身份证号码
时间: 2024-06-14 08:04:11 浏览: 151
以下是Java判断是否为身份证号码的示例代码:
```java
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class IDCardValidator {
public static void main(String[] args) {
String idCard = "身份证号码"; // 替换为要验证的身份证号码
if (isValidIDCard(idCard)) {
String birthday = getBirthday(idCard);
System.out.println("生日:" + birthday);
} else {
System.out.println("身份证号码不合法");
}
}
// 判断身份证号码是否合法
public static boolean isValidIDCard(String idCard) {
// 判断长度是否为18位
if (idCard.length() != 18) {
return false;
}
// 判断前17位是否为数字
String idCard17 = idCard.substring(0, 17);
if (!isNumeric(idCard17)) {
return false;
}
// 判断最后一位是否为数字或小写字母
char lastChar = idCard.charAt(17);
if (!Character.isDigit(lastChar) && !Character.isLowerCase(lastChar)) {
return false;
}
// 判断日期是否存在
String birthday = idCard.substring(6, 14);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
dateFormat.setLenient(false);
try {
dateFormat.parse(birthday);
} catch (ParseException e) {
return false;
}
// 判断最后一位校验码是否正确
if (!isValidCheckCode(idCard)) {
return false;
}
return true;
}
// 获取身份证号码中的生日
public static String getBirthday(String idCard) {
String birthday = idCard.substring(6, 14);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try {
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
return outputFormat.format(dateFormat.parse(birthday));
} catch (ParseException e) {
return "0000-00-00";
}
}
// 判断字符串是否为纯数字
public static boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
// 判断身份证号码的最后一位校验码是否正确
public static boolean isValidCheckCode(String idCard) {
int[] weights = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
char[] checkCodes = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += (idCard.charAt(i) - '0') * weights[i];
}
int index = sum % 11;
char checkCode = checkCodes[index];
return idCard.charAt(17) == checkCode;
}
}
```
阅读全文