中国身份证号码的校验涉及严格的规则,主要用于验证号码的格式合法性(是否符合国家标准),但无法验证证件真实性(需对接公安系统)。以下是完整的校验规则和实现逻辑: 身份证号码结构(18位) `AAAAAA YYYYMMDD XXX C` 地址码(AAAAAA):前6位,代表户籍所在地(需符合最新行政区划代码)。 出生日期码(YYYYMMDD):第7-14位,必须为有效日期(如19900101)。 顺序码(XXX):第15-17位,奇数男性、偶数女性。 校验码(C):第18位,由前17位计算得出(0-9或X)。 校验码计算规则 权重分配:前17位分别乘以固定权重系数: `[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]` 加权求和: `S = Sum(ID[i] * W[i]) (i=0~16)` 取模11: S_mod = S % 11 映射校验码:根据余数S_mod查表: | 余数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |------|---|----|----|----|----|----|----|----|----|----|-----| | 校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 校验步骤(代码实现逻辑) 基本检查: 长度必须为18位 前17位全为数字 第18位是数字或X 地址码校验: 前6位在有效行政区划列表中(需定期更新) 日期校验: 第7-14位转换为日期(如1990-01-01),检查是否为有效日期 校验码计算: 按权重计算并比对最后一位