问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

身份证号码校验,你真的懂了吗?

创作时间:
2025-01-22 20:18:44
作者:
@小白创作中心

身份证号码校验,你真的懂了吗?

身份证号码作为每个人独一无二的身份标识,其编码规则和校验方法至关重要。你知道如何通过18位身份证号码判断一个人的性别吗?或者如何利用特定算法校验身份证号码的真实性?本文将带你深入了解身份证号码背后的秘密,让你不再困惑于各种校验规则。无论是编程校验还是手动核对,都能轻松掌握,快来看看你是否真的懂得身份证号码的奥秘吧!

01

身份证号码的结构解析

18位身份证号码由以下部分组成:

  • 前6位:地区码,表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
  • 第7至14位:出生日期码,表示编码对象的出生年、月、日,格式为YYYYMMDD。
  • 第15至17位:顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,奇数分配给男性,偶数分配给女性。
  • 第18位:校验码,根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
02

校验算法详解

身份证号码的校验采用模11算法,具体步骤如下:

  1. 将身份证号码从左至右标记为a1, a2, ..., a18,其中a18为校验码。
  2. 计算权重系数Wi = 2^(18-i) mod 11,其中mod表示求余数。
  3. 计算S = Σ(a_i * W_i)(i从1到17)。
  4. 计算校验码a18 = (12 - (S mod 11)) mod 11。

如果计算出的校验码是10,则用大写字母X表示。

示例

以身份证号码11010519491231002X为例:

  1. 权重系数分别为:7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。
  2. 计算加权和:(17 + 19 + 010 + 15 + 08 + 54 + 12 + 91 + 46 + 93 + 17 + 29 + 310 + 15 + 08 + 04 + 2*2) = 189。
  3. 计算余数:189 mod 11 = 2。
  4. 查找校验码:(12 - 2) mod 11 = 10,对应X。

因此,该身份证号码的校验码正确。

Python代码实现

def calculate_check_digit(id_base):
    weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    check_chars = '10X98765432'
    sum_ = 0
    for i in range(17):
        sum_ += int(id_base[i]) * weights[i]
    return check_chars[sum_ % 11]

def check_id_card(id_card):
    if len(id_card) != 18:
        return False, '身份证长度错误'
    check_code = calculate_check_digit(id_card[:-1])
    if check_code != id_card[-1].upper():
        return False, '校验码错误'
    return True, '身份证号码有效'

# 测试
print(check_id_card('11010519491231002X'))  # 应输出(True, '身份证号码有效')
03

实际应用场景

身份证号码校验在日常生活中非常重要,例如:

  • 房屋租赁:房东需要核实租客的真实身份,防止虚假身份信息。
  • 借贷:债权人需要确认借款人身份,避免身份冒用。
  • 合同签订:在各类合同中,准确的身份信息是合同有效的基础。

实用工具推荐

  • 微信小程序“普尔查”:提供个人身份证实名认证查询服务,只需输入姓名和身份证号码即可验证信息真实性。
  • 正则表达式校验:在开发场景中,可以使用正则表达式快速验证号码格式是否正确。
04

常见问题解答

  1. 15位与18位身份证号码的区别

    • 15位号码是早期使用的,没有校验码,且出生年份只有两位。
    • 18位号码是1999年之后推广的,增加了校验码,出生年份为四位。
  2. 校验码X的含义

    • X代表10,当校验码计算结果为10时,用X表示,以保持号码长度为18位。
  3. 如何判断性别

    • 通过第17位数字判断,奇数表示男性,偶数表示女性。

身份证号码的校验不仅是确保信息准确性的手段,更是保护个人身份安全的重要措施。通过了解其结构和校验方法,我们能更好地运用这一重要信息,避免因信息错误带来的麻烦。无论是日常生活还是软件开发,掌握身份证号码的校验规则都是非常实用的技能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号