public class IdCardVerify {
public static boolean idCardVerify(char[] idCardNum){
//身份证的编码规则(18位)
//前六位是地区代码,第七位到第十四位出生年月日,第十五、十六为派出所代码,第十七为是性别,最后一位是校验码
//校验的计算公式:身份证最后一位=从左到右身份证的数字乘以加权因子求和 % 11
int sum=0;
int[] arr= {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//加权因子
for(int i=16;i>=0;i--){
sum=sum+(idCardNum[16-i]-'0')*arr[16-i];//从左到右身份证的数字乘以加权因子求和
}
char check='a';
switch (sum%11){//总数对11取模
case 0:check='1';
break;
case 1:check='0';
break;
case 2:check='X';
break;
case 3:check='9';
break;
case 4:check='8';
break;
case 5:check='7';
break;
case 6:check='6';
break;
case 7:check='5';
break;
case 8:check='4';
break;
case 9:check='3';
break;
case 10:check='2';
break;
}
if(idCardNum[17]==check){
return true;
}else{
return false;
}
}
}
参考图
