身份证号码的正则表达式主要用于验证身份证号码的格式是否正确。中国的身份证号码有两种格式:15位和18位。15位身份证号码全部由数字组成,而18位身份证号码由17位数字和1位校验码组成,校验码可能是数字或字母X。
以下是一个Java示例代码,用于验证身份证号码的正则表达式:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class IDCardValidator {
// 15位身份证号码正则表达式
private static final String FIFTEEN_ID_CARD_REGEX = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
// 18位身份证号码正则表达式
private static final String EIGHTEEN_ID_CARD_REGEX = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
public static boolean validate(String idCard) {
Pattern pattern15 = Pattern.compile(FIFTEEN_ID_CARD_REGEX);
Pattern pattern18 = Pattern.compile(EIGHTEEN_ID_CARD_REGEX);
Matcher matcher15 = pattern15.matcher(idCard);
Matcher matcher18 = pattern18.matcher(idCard);
return matcher15.matches() || matcher18.matches();
}
public static void main(String[] args) {
String idCard1 = "11010519491231002X"; // 合法的18位身份证号码
String idCard2 = "110105491231002"; // 合法的15位身份证号码
String idCard3 = "110105194912310021"; // 不合法的18位身份证号码
System.out.println(validate(idCard1)); // 输出: true
System.out.println(validate(idCard2)); // 输出: true
System.out.println(validate(idCard3)); // 输出: false
}
}
对于18位身份证号码,可以通过以下算法验证校验码的正确性:
public static boolean validateCheckCode(String idCard) {
if (idCard.length() != 18) {
return false;
}
String[] factors = {"7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"};
String[] checkCodes = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += Integer.parseInt(String.valueOf(idCard.charAt(i))) * Integer.parseInt(factors[i]);
}
int mod = sum % 11;
return checkCodes[mod].equalsIgnoreCase(String.valueOf(idCard.charAt(17)));
}
通过结合正则表达式和校验码算法,可以更全面地验证身份证号码的正确性。
没有搜到相关的文章
领取专属 10元无门槛券
手把手带您无忧上云