当前位置: 首页 > news >正文

身份证号校验码算法

ISO 7064:1983 MOD 11-2 是一种国际标准的校验码算法,专为验证数字序列的准确性而设计,广泛应用于身份证号、银行账号等场景。其核心是通过加权求和与模运算生成校验码,以下是详细解析:


🔢 ​​一、算法原理与步骤​

​1. 加权因子分配​
  • ​固定权重序列​​:前17位数字分别乘以特定权重(从左至右):

    [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]

    权重值通过公式 Wi​=2i−1mod11计算得出,确保唯一性。

​2. 加权求和​
  • 计算前17位数字与对应权重的乘积之和 S:

    S=∑i=117​(ai​×Wi​)

    ​示例​​:身份证前17位 53010219200508011的计算过程:

    5×7 + 3×9 + 0×10 + ... + 1×4 + 1×2 = 189
​3. 取模运算​
  • 对总和 S进行模11运算,得到余数 T:

    T=Smod11

    ​示例​​:189mod11=2。

​4. 生成校验码​
  • 余数 T映射到校验码表:

    ​余数T​

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    ​校验码​

    1

    0

    X

    9

    8

    7

    6

    5

    4

    3

    2

    ​示例​​:余数 2→ 校验码 X,完整身份证号为 53010219200508011X


⚙️ ​​二、算法特性​

  1. ​错误检测能力​

    • 可识别​​单数字错误​​(如 5输为 8

    • 可检测​​相邻数字交换​​(如 12输为 21

    • 理论检错率超 ​​99%​​ 。

  2. ​校验码意义​

    • X对应罗马数字 10,避免校验码超长(否则需双字符)

    • 校验时需统一​​大写 X​,小写 x无效 。


💻 ​​三、代码实现(Python)​

def calculate_check_code(id_17: str) -> str:weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]check_codes = "10X98765432"total = sum(int(id_17[i]) * weights[i] for i in range(17))return check_codes[total % 11]def verify_id(id_18: str) -> bool:return calculate_check_code(id_18[:17]) == id_18[-1].upper()

​使用示例​​:

id_num = "53010219200508011X"
print(verify_id(id_num))  # 输出 True

⚠️ ​​四、注意事项​

  1. ​输入合法性​

    • 前17位必须全为数字,否则需预处理或报错。

  2. ​大小写敏感​

    • 校验码 X必须大写,验证前建议转换 id_18 = id_18.upper()

  3. ​国标依据​

    • 中国身份证标准 ​​GB 11643-1999​​ 明确采用此算法,替代旧版15位身份证 。


💎 ​​总结​

ISO 7064:1983 MOD 11-2 通过​​权重分配→求和→取模→映射​​四步,高效生成校验码。其数学严谨性保障了身份证、金融账号等场景的数据可靠性。实际开发中需注意输入校验与大小写处理,以兼容标准要求。

http://www.dtcms.com/a/353755.html

相关文章:

  • C++中类继承的意义
  • PMP项目管理知识点-⑮预测型项目概念辨析
  • 【Kafka】项目整合使用案例
  • 瑞芯微开发工具Linux Linux_Upgrade_Tool使用方法(镜像烧录)
  • Python 比较huggingface_hub库的hf_hub_download函数和snapshot_download函数
  • 在 .NET 8.0 中实现 JWT 刷新令牌
  • 密钥管理服务KMS介绍
  • 遗传算法:模拟自然选择的优化智慧
  • 可编辑69页PPT | 某手机品牌主数据治理项目案例
  • 神经网络学习笔记12——高效卷积神经网络架构MobileNet
  • Origin 2024 安装包下载与安装教程
  • 【算法速成课1 | 题解】洛谷P3366 【模板】最小生成树 MST(Prim Kruskal)
  • 深度学习入门:神经网络基础知识
  • YOLO11实战 第006期-基于yolo11-seg的香蕉种植园语义分割实战文档(yolo格式数据免费获取)
  • MDK-5.4.2 集成 Compiler 5 编译器
  • 基于SpringBoot的协同过滤余弦函数的美食推荐系统(爬虫Python)的设计与实现
  • 数据结构:堆(Heap)
  • 生成式AI的引擎室:深入剖析LLM内存管理与调度
  • 【解锁Photonics for AI:系统学习光学神经网络与超表面设计,成就下一代光芯片工程师】
  • python - js的引入方式、注释变量、数据类型、强制转换、自动类型转换、js运算符、分支结构、函数
  • Nginx单端口代理多个前后端服务的完整配置指南
  • 【雅思019】Canceling an appointment
  • 数据结构——算法设计的基本思想(穷举、递归、分治等)
  • 【自用】JavaSE--junit单元测试、反射、注解、动态代理
  • FreeRTOS 常见面试题与核心知识点详解
  • Redis数据持久化——RDB快照和Aof日志追加
  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档