python判断身份证信息和生成身份证最后校验码

直接上代码把:

小编一共写了三个方法:a() , boolDcard(IDCrad)  ,  boolDcardCheckCode(IDCrad)

慢慢看就可以知道各种的用处了

import regex as reg

# 身份证验证类

WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
IDCHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
IDNUM = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2]

AREA = ["华北", "东北", "华东", "华中", "华南", "西南", "西北"]
PROVINCIAL = [["北京市", "天津市", "河北省", "山西省", "内蒙古自治区"],
              ["辽宁省", "吉林省", "黑龙江省"],
              ["上海市", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "台湾省(886)"],
              ["河南省", "湖北省", "湖南省"],
              ["广东省", "广西壮族自治区", "海南省", "香港特别行政区(852)", "澳门特别行政区(853)"],
              ["四川省", "贵州省", "云南省", "西藏自治区", "重庆市"],
              ["陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区"]]


def a():
    """
    判断这个身份证是否正确
    得出这个身份证一些基本信息
    """
    ID = input('请输入十八位身份证号码: ')
    if len(ID) != 18:
        print("错误的身份证号码")
        print("请重新输入!")
        a()
    else:
        print("你的身份证号码是 " + ID)
        ID_check = ID[17]
        ID_aXw = 0
        for i in range(len(WEIGHTS)):
            ID_aXw = ID_aXw + int(ID[i]) * WEIGHTS[i]
        ID_Check = ID_aXw % 11

        if ID_check != IDCHECK[ID_Check]:
            print('错误的身份证号码')
            a()
        else:
            print('正确的身份证号码')
            ID_add = ID[0:6]
            ID_birth = ID[6:14]
            ID_sex = ID[14:17]
            year = ID_birth[0:4]
            month = ID_birth[4:6]
            day = ID_birth[6:8]
            print("生日: " + year + '年' + month + '月' + day + '日')
            if int(ID_sex) % 2 == 0:
                print('性别:女')
            else:
                print('性别:男')
            print("你来自:%s地区,%s" % (AREA[int(ID[0]) - 1], PROVINCIAL[int(ID[0]) - 1][int(ID[1]) - 1]))

# 二代身份证正则表达式
REGEX = r"^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$"


def boolDcard(IDCard):
    """
        判断 这个身份证是否正确
        返回 一个 bool 值
    """
    if reg.search(REGEX, IDCard):
        ID_check = IDCard[17]
        ID_aXw = 0
        for i in range(len(WEIGHTS)):
            ID_aXw = ID_aXw + int(IDCard[i]) * WEIGHTS[i]
        ID_Check = ID_aXw % 11
        if ID_check != IDCHECK[ID_Check]:
            return False
        else:
            return True
    else:
        return False



def boolDcardCheckCode(IDCard):
    pass
    """
        给定身份证前17位数
        返回这个身份证的校验码
    """
    if len(IDCard) != 17:
        return False
    ID_aXw = 0
    for i in range(len(WEIGHTS)):
        ID_aXw = ID_aXw + int(IDCard[i]) * WEIGHTS[i]
    ID_Check = IDCHECK[ID_aXw % 11]
    return IDCard + ID_Check


if __name__ == "__main__":
    print(boolDcard("362322199409103912"))
    # a()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值