身份证第18位计算
本文计算方式源自 百度百科,根据计算方式,Java计算代码如下文所示。
计算方法
1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、用加出来和除以11,看余数是多少?
4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X...)
5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字X。
String[] idDict = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
// 17位如下 String idCard = "53010219200508011"; List<Integer> nums = new ArrayList<Integer>(); Matcher m = Pattern.compile("\\d").matcher(idCard); while (m.find()) { nums.add(Integer.valueOf(m.group())); } int gg = 7 * nums.get(0) + 9 * nums.get(1) + 10 * nums.get(2) + 5 * nums.get(3) + 8 * nums.get(4) + 4 * nums.get(5) + 2 * nums.get(6) + 1 * nums.get(7) + 6 * nums.get(8) + 3 * nums.get(9) + 7 * nums.get(10) + 9 * nums.get(11) + 10 * nums.get(12) + 5 * nums.get(13) + 8 * nums.get(14) + 4 * nums.get(15) + 2 * nums.get(16); int eighteen = gg % 11; System.out.println(idDict[eighteen]);