身份证号码验证规则及Java实现

需积分: 9 1 下载量 21 浏览量 更新于2024-09-11 收藏 48KB DOC 举报
身份证验证及规则 身份证验证及规则是指根据中国大陆地区的身份证号码规则来验证身份证的合法性。身份证号码由十八位数字组成,每一位数字都有其特定的含义和计算规则。 首先,身份证号码的前六位数字表示编码对象常住户口所在县(市、旗、区)的行政区划代码。其中,第1、2位表示户籍所在省份,第3、4位表示户籍所在城市,第5、6位表示户籍所在区或县。 其次,身份证号码的第七位到第十四位表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如,1981年05月11日就用19810511表示。 再次,身份证号码的第十五位到十七位为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中,第十七位奇数分给男性,偶数分给女性。 最后,身份证号码的第十八位数字是通过计算得到的。计算规则如下: 1. 将前面的身份证号码17位数分别乘以不同的系数,从第一位到第十七位的系数分别为7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2、3、4、0、5、2、4、1、9、8、0、0、1、0、1、0、1。 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。 通过上述规则,可以编写Java代码来验证身份证的合法性。例如,可以编写一个函数来检查身份证号码的合法性,如下所示: ```java public boolean checkIdCard(String idCard) { // 将身份证号码分解成前17位和最后一位 String first17 = idCard.substring(0, 17); String lastDigit = idCard.substring(17, 18); // 计算身份证号码的最后一位数字 int sum = 0; for (int i = 0; i < 17; i++) { sum += (first17.charAt(i) - '0') * getWeight(i); } int remainder = sum % 11; String expectedLastDigit = getExpectedLastDigit(remainder); // 比较计算结果和实际身份证号码的最后一位数字 return expectedLastDigit.equals(lastDigit); } private int getWeight(int i) { int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; return weights[i]; } private String getExpectedLastDigit(int remainder) { String[] lastDigits = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}; return lastDigits[remainder]; } ``` 通过这种方式,可以编写一个Java函数来验证身份证的合法性。