18位的身份证的最后一位是校验码,这个校验码采用的是ISO 7064 Mod 11-2校验系统实现的,其校验公式如下:
公式说明:
- n:字符串的字符个数(包括校验码)
- i:字符位置序号(由右至左,包括校验码,空格与分隔符不及),即最右边的字符i=1
- ai:字符值,0-10,10用X表示
- r:底数,2
- M:模数,11
java实现: private static char check(String str) { int len = str.length(); char[] ary = str.toCharArray(); int sum = 0; for(int i = 0; i < len;i++) { int v = 0; char cur = ary[i]; if(cur == 'X' || cur == 'x') v = 10; else v = Character.getNumericValue(cur); sum += v; sum <<= 1; } int temp = (12 - sum % 11) % 11; if(temp == 10) return 'x'; return Character.forDigit(temp, 10); }