
详见维基
获取身份证校验码
```
private static int[] weight={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //十七位数字本体码权重
private static char[] validate={ ‘1’,’0’,’X’,’9’,’8’,’7’,’6’,’5’,’4’,’3’,’2’}; //mod11,对应校验码字符值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 获取身份证最后一位校验码
* @param id17 前17位
* @return 校验位
*/
public static char getValidateCode(String id17){
int sum=0;
int mode=0;
for(int i=0;i<17;i++){
sum=sum+Integer.parseInt(String.valueOf(id17.charAt(i)))*weight[i];
}
mode=sum%11;
return validate[mode];
}
1
2
### 校验身份证号是否正确
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 检查身份证号是否正确
* @param id 身份证号字符数组
* @return <code>true</code> 表示正确
*/
public static boolean checkID(char[] id){
int sum = 0,n;
for (int i = 0; i < 17; i++)
sum += ((1 << (17-i)) % 11) * (id[i] - '0');
n = (12 - (sum % 11)) % 11;
if (n < 10)
return (n == (id[17] - '0'));
else
return (id[17] == 'X');
}
```




近期评论