Python3身份证校验

查看 89|回复 9
作者:Alex.Merceryj   
python3身份证校验
  • 看到有朋友发了一个专门的身份证校验,就很感兴趣,好奇是什么原理。百度了下计算规则,发现python也可以实现。
  • 来源地址
  • 在线身份证校验

    py3实现
  • 实际上就是根据身份证前17位,计算求和,然后取余找到对应的校验码。

    # 身份证计算规则
    # 身份证号码 最后一位随便填
    s_id="530102199112214016"
    # 系数
    c_list=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    # 余数对应列表
    s_c_list=["1","0","X","9","8","7","6","5","4","3","2"]
    #s求和
    s_sum=0
    for index,i in enumerate(s_id[0:17]):
        s_sum=s_sum+int(i)*c_list[index]
        # print(s_sum)
    # 求余数
    c_mod=s_sum%11
    result=s_id[0:17]+str(s_c_list[c_mod])
    # 合法身份证
    print(result)

    身份证, 余数

  • zhy1992   

    这个好像就是检验最后一个校验位  合不合规把  并不涉及到是不是真实存在 好像
    yaphoo   

    真的太神奇了
    zhangxuou123   

    这技术有点高
    wuxin9749   


    zhy1992 发表于 2023-5-29 10:18
    这个好像就是检验最后一个校验位  合不合规把  并不涉及到是不是真实存在 好像

    对 只是通过算法去校验最后一个校验位  并不能说明真实存在
    prempeng   

    最后一位的规则是这样计算的么
    bake   

    有更精简的代码https://www.52pojie.cn/thread-1707359-1-1.html
    daimiaopeng   

    def check_id_card(id_card):
        """
        身份证校验函数
        :param id_card: 身份证号码
        :return: True or False
        """
        # 身份证号码长度必须为18位
        if len(id_card) != 18:
            return False
        # 身份证号码的前17位必须为数字
        if not id_card[:17].isdigit():
            return False
        # 身份证号码的最后一位可以是数字或字母X(大小写均可)
        if not (id_card[-1].isdigit() or id_card[-1].lower() == 'x'):
            return False
        # 身份证号码校验规则
        weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
        id_card_sum = 0
        for i in range(17):
            id_card_sum += int(id_card[i]) * weights[i]
        check_code = check_codes[id_card_sum % 11]
        if check_code != id_card[-1].upper():
            return False
        return True
    PleasantXuan   

    这个只是核验校验位,感觉只能防止手滑输错吧
    laustar   

    学习了!!!
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部