Java 通过正则表达式验证身份证号码格式是否正确

原创     发表于 2020-11-12 10:54     阅读 97  

身份证号码格式判断在日常开发工作中比较常见,而检验身份证号码格式是否正确的核心则在于正则表达式,很多的身份证号码格式校验代码都不太全面,或者说兼容性不太好。经过使用中检验和对正则表达式多次修复,现将校验代码分享给大家。多的不说,直接上代码!

1、定义正则表达式常量类

/**
 * 身份证号码正则表达式
 */
private static final String ID_NUMBER_REGEX = "[1-9]{1}[0-9]{5}(19|20)[0-9]{2}((0[1-9]{1})|(1[0-2]{1}))((0[1-9]{1})|([1-2]{1}[0-9]{1}|(3[0-1]{1})))[0-9]{3}[0-9x]{1}";

2、声明身份证正则表达式校验模式

/**
 * 身份证正则模板
*/
private static final Pattern ID_NUMBER_PATTERN = Pattern.compile(ID_NUMBER_REGEX);

3、校验代码实现

/**
* 验证身份证号是否正确,正确返回true,否则返回false
* @param idNumber
* @return
*/
public static boolean isIdNumber(String idNumber) {
if (isEmpty(idNumber)) {
return false;
}
/**
* HuangLongPu 2019-11-01 >>> 之前为 [1-9]{2}[0-9]{4},改为 [1-9]{1}[0-9]{5} 主要兼容比如 50开头的身份证号码
*/
return ID_NUMBER_PATTERN.matcher(idNumber).matches();
}

使用常量类和提前声明正则表达式校验模式,主要是为了运行效率考虑,也更符合编码规范。

更多业务场景校验程序可参考 Obatis开源项目 校验类:https://github.com/obatis/obatis-tools/blob/master/src/main/java/com/obatis/tools/ValidateTool.java