Files
home-api/packages/serv/resources/ID/validate.md
2025-08-13 22:07:41 +08:00

51 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
中国身份证号码的校验涉及严格的规则,主要用于验证号码的格式合法性(是否符合国家标准),但无法验证证件真实性(需对接公安系统)。以下是完整的校验规则和实现逻辑:
身份证号码结构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检查是否为有效日期
校验码计算:
按权重计算并比对最后一位