简介:本文详细解析了身份证号的校验规则,包括15位与18位身份证号的构成、校验码的计算方法,以及如何通过程序进行校验,旨在为非专业读者提供清晰易懂的技术指导。
身份证号码作为个人身份的唯一标识,其准确性和合法性对于各类信息验证至关重要。本文将深入解析身份证号的校验规则,包括号码的构成、校验码的计算方法,并通过实例展示如何进行校验,帮助读者轻松掌握这一技术要点。
身份证号码分为15位和18位两种,其中15位身份证已基本退出历史舞台,目前广泛使用的是18位身份证。
15位身份证:由6位地址编码(前2位省份,中间2位城市,后2位区县)+ 6位出生日期(年月日,缺省世纪)+ 3位顺序码组成。第15位为性别码,奇数为男性,偶数为女性。
18位身份证:在15位身份证的基础上增加了3位,即6位地址编码+ 8位出生日期(完整的年月日)+ 3位顺序码+ 1位校验码。第17位同样表示性别,奇数为男性,偶数为女性。
18位身份证的最后一位是校验码,用于检验身份证的正确性。校验码的计算采用ISO 7064:1983.MOD 11-2校验码系统。
加权因子求和:将前17位数字分别与对应的加权因子相乘(加权因子为7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2),然后将乘积相加。
对11取余:将上一步得到的和除以11,取余数。
查表得校验码:根据余数通过校验码对照表(’1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’, ‘2’)查找对应的校验码。
假设身份证号前17位为11010519491231002,计算校验码过程如下:
1*7 + 1*9 + 0*10 + 1*5 + 0*8 + 5*4 + 1*2 + 9*1 + 4*6 + 9*3 + 1*7 + 2*9 + 3*10 + 1*5 + 0*8 + 0*4 + 2*2 = 105105 % 11 = 22 对应校验码表中的 2,因此完整的身份证号为 110105194912310022。在实际应用中,我们可以通过编写程序来自动校验身份证号。以下是一个简单的Java代码示例,用于校验18位身份证号的有效性:
```java
public class IDCardValidator {
private static final int[] WEIGHT_FACTORS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};private static final String[] CHECK_CODES = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};public static boolean validateIDCard(String idCard) {if (idCard == null || idCard.length() != 18) {return false;}int sum = 0;for (int i = 0; i < 17; i++) {sum += (idCard.charAt(i) - '0') * WEIGHT_FACTORS[i];}int mod = sum %