身份证号校验:Python实现与原理解析

身份证号,作为个人身份的重要标识,其准确性对于社会管理、公共服务等领域至关重要。本文将介绍如何使用Python进行身份证号的校验,并解析其背后的原理。

身份证号概述

中国大陆的身份证号由18位数字组成,其中前6位为行政区划代码,7-14位为出生日期码,15-17位为顺序码,第18位为校验码。校验码的计算遵循特定的算法。

校验码计算原理

校验码的计算基于前17位数字,通过模11的余数来确定。具体规则如下:

  1. 将身份证号的前17位数字乘以对应的权重(从1到17),并将结果求和。
  2. 将求和结果对11取模,得到一个0到10的数字。
  3. 根据模11的结果,对应到校验码表(0-10分别对应1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2)。

Python实现身份证号校验

下面是一个使用Python进行身份证号校验的示例代码:

def check_id_number(id_number):
    if len(id_number) != 18 or not id_number.isdigit():
        return False

    weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']

    sum = 0
    for i in range(17):
        sum += int(id_number[i]) * weight[i]

    mod = sum % 11
    last_digit = id_number[-1]

    return last_digit.upper() == check_code[mod]

# 示例
id_number = "110101199001010014"
print(check_id_number(id_number))  # 输出:True

旅行图:身份证号校验流程

使用Mermaid语法,我们可以将身份证号校验的流程绘制成旅行图:

journey
    title 身份证号校验流程
    section 校验开始
      step1: 校验身份证号长度和是否为数字
      section 校验通过
        step2: 计算前17位数字的加权和
        step3: 对11取模
        step4: 根据模11结果获取校验码
        step5: 比较校验码与身份证号最后一位
        step6: 返回校验结果
    section 校验失败
      step1: 返回校验失败结果

关系图:身份证号构成

身份证号的构成可以通过关系图来表示:

erDiagram
    ADMINISTRATION_CODE ||--o BIRTH_DATE_CODE : "contains"
    BIRTH_DATE_CODE ||--o SEQUENCE_CODE : "contains"
    SEQUENCE_CODE ||--o CHECK_CODE : "contains"
    ADMINISTRATION_CODE {
        int code
    }
    BIRTH_DATE_CODE {
        int year
        int month
        int day
    }
    SEQUENCE_CODE {
        int code
    }
    CHECK_CODE {
        char code
    }

结语

通过本文的介绍,我们了解了身份证号的构成、校验码的计算原理以及如何使用Python进行身份证号的校验。身份证号校验在很多场景下都有应用,如身份验证、信息录入等。掌握这一技能,可以提高数据处理的准确性和效率。