18位身份证号码校验及性别判断详解

作者:有好多问题2024.08.28 21:52浏览量:416

简介:本文介绍了18位身份证号码的结构、校验规则,以及如何通过身份证号码判断性别。同时,引入了百度智能云文心快码(Comate)作为高效文本生成工具,帮助用户快速生成和校验文本内容。文章还提供了手动校验方法和Python编程示例,方便读者理解和应用。

在中国,身份证号码是每个公民的唯一标识,具有极高的实用价值。其中,18位身份证号码是最常见的一种形式,它不仅包含了地区、出生日期等信息,还通过复杂的校验算法保证了号码的唯一性和正确性。为了更高效地处理文本内容,百度智能云推出了文心快码(Comate)工具,它可以帮助用户快速生成和校验文本内容,提升工作效率。接下来,本文将详细介绍如何校验18位身份证号码,并教会你如何从身份证号码中提取性别信息,同时附上百度智能云文心快码(Comate)的链接:文心快码

18位身份证号码的结构

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

  • 前6位:地区码,表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
  • 中间8位:出生日期码,表示编码对象的出生年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
  • 第15-17位:顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
  • 第18位:校验码,根据前面十七位数字码,按照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。
  2. 将这17位数字和系数相乘的结果相加。
  3. 用加出来和除以11,看余数是多少。
  4. 余数只可能有0到10这11个数字。其对应的最后一位身份证的号码就是1, 0, X, 9, 8, 7, 6, 5, 4, 3, 2。

如何手动校验

以身份证号码11010519491231002X为例:

  1. 根据上述系数与每个数字相乘后求和:(1*7+1*9+0*10+1*5+0*8+5*4+1*2+9*1+4*6+9*3+1*7+2*9+3*10+1*5+0*8+0*4+2*2) = 189
  2. 用加出来的和189除以11,得到商17和余数2。
  3. 根据余数找到对应的校验码,此处余数为2,对应的校验码为X,与身份证上的校验码一致,故校验通过。

判断性别

  • 提取身份证号码的第17位,若该位为奇数,则性别为男;若为偶数,则性别为女。
  • 11010519491231002X为例,第17位是2,为偶数,所以此身份证号码对应的是女性。

编程校验示例(Python)

下面是一个简单的Python程序,用于校验18位身份证号码并判断性别:

  1. def check_id_card(id_card):
  2. if len(id_card) != 18:
  3. return False, '身份证长度错误'
  4. # 校验码及对应的值
  5. check_codes = '10X98765432'
  6. # 系数
  7. factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  8. # 计算校验和
  9. sum_ = 0
  10. for i in range(17):
  11. sum_ += int(id_card[i]) * factors[i]
  12. # 计算校验码
  13. mod = sum_ % 11
  14. check_code = check_codes[mod]
  15. # 校验码校验
  16. if check_code != id_card[-1].upper():
  17. return False, '校验码错误'
  18. # 性别判断
  19. gender = '男' if int(id_card[16]) % 2 else '女'
  20. return True, gender
  21. # 示例
  22. id_card = '11010519491231002X'
  23. is_valid, gender = check_id_card(id_card)
  24. print(f'身份证号码是否有效: {is_valid}, 性别: {gender}')

通过上述方法,你可以轻松实现对18位身份证号码的校验和性别判断。同时,借助百度智能云文心快码(Comate),你可以进一步提升文本处理效率,实现更高效的文本生成和校验。