最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界要闻:18位身份证校验Python

来源:博客园


(资料图)

18位身份证号码的校验(Python)

  1. 在 Python 中,可以使用更简单的方法来计算校验码。例如,可以使用 map() 和 lambda 表达式来将身份证号的前17位转换为整数列表,如下所示:

    nums = list(map(int, code[:17]))

然后,可以使用 numpy 库中的 dot() 函数来计算加权和,如下所示:

s = np.dot(nums, [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2])

最后,可以使用一个简单的表达式来计算校验码:

cd = (12 - s % 11) % 11

Python代码示例

import numpy as npwhile True:    id_number = input("请输入18位身份证号:")    if len(id_number) != 18 or not id_number[:-1].isdigit() or id_number[-1] not in ["X", "x", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:        print("请输入正确的身份证号!")    else:        break# 计算校验码nums = list(map(int, id_number[:17]))weighted_sum = np.dot(nums, [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2])check_code = (12 - weighted_sum % 11) % 11# 判断校验码是否正确if (id_number[-1].upper() == "X" and check_code == 10) or (check_code == int(id_number[-1])):    # 输出地址码    area_code = id_number[:6]    print("地址码:{}".format(area_code))    # 输出生日    birthday = id_number[6:14]    print("生日:{}年{}月{}日".format(birthday[:4], birthday[4:6], birthday[6:8]))    # 输出性别    gender_code = int(id_number[16])    if gender_code % 2 == 0:        gender = "女"    else:        gender = "男"    print("性别:{}".format(gender))    # 输出校验码    print("校验码:{}".format(check_code))        # 输出校验结果    print("校验结果:正确")else:    print("校验结果:错误")

代码中添加的功能包括:

  • 输出身份证的地址码,即前6位;
  • 输出身份证的生日,即第7位到第14位;
  • 输出身份证的性别,即第17位;
  • 输出身份证的校验码,即最后一位(如果校验成功)。

注意,为了简化代码,性别的判断仅适用于18位身份证,不适用于15位身份证。

关键词: