检查身份证号是否符合规则
Posted 默慊$
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查身份证号是否符合规则相关的知识,希望对你有一定的参考价值。
日常开发中,我们会遇到各种各样的数据校验规则,最简单的从非空到复杂一些的编码输入规则,今天就分享一个身份证编码的校验,这个其实也是很常见的,写出来一个是加深印象,其次也可以分享给大家使用,后续想找的话也可以很快找到,上代码:
/**
* 检查身份证号是否符合规则
* @param idNumber 本次检查行数据
* @return
*/
public boolean isIdNumber(String idNumber)
if (StringUtils.isBlank(idNumber))
return false;
// 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
String regularExpression =
"(^[1-9]\\\\d5(18|19|20)\\\\d2((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\\\d3[0-9Xx]$)|"
+ "(^[1-9]\\\\d5\\\\d2((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\\\d3$)";
boolean matches = idNumber.matches(regularExpression);
// 判断第18位校验值
if (matches)
if (idNumber.length() == ID_NUMBER_LENGTH)
try
char[] charArray = idNumber.toCharArray();
// 前十七位加权因子
int[] idCardWi = 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2;
// 这是除以11后,可能产生的11位余数对应的验证码
String[] idCardY = "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2";
int sum = 0;
for (int i = 0; i < idCardWi.length; i++)
int current = Integer.parseInt(String.valueOf(charArray[i]));
int count = current * idCardWi[i];
sum += count;
char idCardLast = charArray[17];
int idCardMod = sum % 11;
if (idCardY[idCardMod].toUpperCase()
.equals(String.valueOf(idCardLast).toUpperCase()))
return true;
else
log.info("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase()
+ "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
return false;
catch (Exception e)
e.printStackTrace();
return false;
return matches;
其中的正则表达式没啥说的,有基础的可以看懂,没基础的复制完了自己试试好使就行,主要是对18位身份证号最后一位的校验,可能需要看看代码逻辑理解一下,前17位数分别乘以对应的加权因子,然后除以11的余数是验证码数组的索引,如果对应的验证码跟第18位不相同,说明输入错误,有需要的兄弟拿去试试吧
以上是关于检查身份证号是否符合规则的主要内容,如果未能解决你的问题,请参考以下文章