ISO 7064校验码计算 - 身份证/账号校验
常见问题与知识点
ISO 7064是国际标准化组织制定的校验字符系统标准,全称为"Information technology — Security techniques — Check character systems"。它定义了多种数学算法,用于检测数据在录入或传输过程中是否发生错误。常见的子系统包括:
- MOD 11-2:用于中国身份证号码、ISBN、部分税号等
- MOD 97-10:用于IBAN国际银行账号、社保账号等金融领域
- MOD 37-2:支持字母数字混合编码,用于产品序列号等
- MOD 11,10:混合系统,可检测更多类型的错误
中国18位身份证采用ISO 7064 MOD 11-2变体算法,具体步骤:
- 前17位数字分别乘以固定权重:
[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] - 将17个乘积求和,得到总和S
- 计算余数:R = S mod 11
- 根据映射表转换为校验码:
0→1, 1→0, 2→X, 3→9, 4→8, 5→7, 6→6, 7→5, 8→4, 9→3, 10→2
权重来源于2^(18-i) mod 11(i=1到17),这种设计能有效检测单数字错误和相邻数字换位错误。
MOD 97-10是ISO 7064中检测能力最强的纯数字校验系统之一:
- 检测率极高:模数97足够大,能检测99%以上的常见录入错误
- 双校验位:提供00-97共98个可能的校验值,远多于单校验位系统
- IBAN标准:国际银行账号(IBAN)采用此算法,将字母转换为数字后再进行MOD 97-10校验
- 计算简单:只需mod 97运算,适合计算机高效处理
校验公式:校验码 = 98 - (本体码 × 100 mod 97),验证时整个数字 mod 97 应等于1。
在ISO 7064 MOD 37-2系统中:
- 字符集包含0-9(值0-9)和A-Z(值10-35),共36个有效字符
- 校验码的取值范围是0-36,共37个可能值
- 当校验码值为36时,使用特殊字符"*"(星号)表示
- 这种设计确保了校验系统能覆盖完整的37个余数类
权重从右到左循环使用2到37(共36个权重值),模数为37。
| 位数 | 含义 | 说明 |
|---|---|---|
| 第1-2位 | 省份代码 | 如11=北京,44=广东 |
| 第3-4位 | 城市代码 | 各省内城市编码 |
| 第5-6位 | 区县代码 | 城市下辖区县编码 |
| 第7-14位 | 出生日期 | YYYYMMDD格式 |
| 第15-17位 | 顺序码 | 同日出生者排序,第17位奇=男,偶=女 |
| 第18位 | 校验码 | ISO 7064 MOD 11-2算法生成 |
- 验证模式:输入包含校验位的完整号码,系统验证校验码是否正确。例如输入18位身份证号,判断第18位是否正确。
- 计算模式:输入不含校验位的本体码,系统自动计算并生成正确的校验码。例如输入17位身份证本体码,自动算出第18位。
工具会自动识别输入长度,智能切换模式,您也可以手动选择。
ISO 7064各子系统设计用于检测常见的人为录入错误:
- 单字符替换错误(如123→126):100%检测
- 相邻字符换位错误(如123→132):MOD 11-2可检测100%的此类错误
- 双字符替换错误:高概率检测
- 移位错误(整体错位):部分可检测
- 随机错误:MOD 97-10检测率超过99.9%
UD5工具箱