python校验身份证合法性

该博客主要介绍使用Python校验身份证合法性,聚焦于利用Python语言实现对身份证有效性的验证,属于信息技术中后端开发相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python校验身份证合法性

	@api.model
    def checkIdcard(slef, idcard):
        Errors = ['验证通过!', '身份证号码位数不对!', '身份证号码出生日期超出范围或含有非法字符!', '身份证号码校验错误!', '身份证地区非法!']
        area = {"11": "北京", "12": "天津", "13": "河北", "14": "山西", "15": "内蒙古", "21": "辽宁", "22": "吉林", "23": "黑龙江",
                "31": "上海", "32": "江苏", "33": "浙江", "34": "安徽", "35": "福建", "36": "江西", "37": "山东", "41": "河南",
                "42": "湖北",
                "43": "湖南", "44": "广东", "45": "广西", "46": "海南", "50": "重庆", "51": "四川", "52": "贵州", "53": "云南",
                "54": "西藏",
                "61": "陕西", "62": "甘肃", "63": "青海", "64": "宁夏", "65": "新疆", "71": "台湾", "81": "香港", "82": "澳门",
                "91": "国外"}
        idcard = str(idcard)
        idcard = idcard.strip()
        idcard_list = list(idcard)

        # 地区校验
        if (not area.get((idcard)[0:2], False)):
            raise ValidationError(Errors[4])
        # 15位身份号码检测
        if (len(idcard) == 15):
            if ((int(idcard[6:8]) + 1900) % 4 == 0 or (
                    (int(idcard[6:8]) + 1900) % 100 == 0 and (int(idcard[6:8]) + 1900) % 4 == 0)):
                erg = re.compile(
                    '[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$')  # //测试出生日期的合法性
            else:
                ereg = re.compile(
                    '[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$')  # //测试出生日期的合法性
            if (re.match(ereg, idcard)):
                return True  # Errors[0]
            else:
                raise ValidationError(Errors[2])
        # 18位身份号码检测
        elif (len(idcard) == 18):
            # 出生日期的合法性检查
            # 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
            # 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
            if (int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10]) % 4 == 0)):
                ereg = re.compile(
                    '[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')  # //闰年出生日期的合法性正则表达式
            else:
                ereg = re.compile(
                    '[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')  # //平年出生日期的合法性正则表达式
            # //测试出生日期的合法性
            if (re.match(ereg, idcard)):
                # //计算校验位
                S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (
                        int(idcard_list[1]) + int(idcard_list[11])) * 9 + (
                            int(idcard_list[2]) + int(idcard_list[12])) * 10 + (
                            int(idcard_list[3]) + int(idcard_list[13])) * 5 + (
                            int(idcard_list[4]) + int(idcard_list[14])) * 8 + (
                            int(idcard_list[5]) + int(idcard_list[15])) * 4 + (
                            int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(
                    idcard_list[8]) * 6 + int(idcard_list[9]) * 3
                Y = S % 11
                M = "F"
                JYM = "10X98765432"
                M = JYM[Y]  # 判断校验位
                if (M == idcard_list[17]):  # 检测ID的校验位
                    return True  # Errors[0]
                else:
                    raise ValidationError(Errors[3])
            else:
                raise ValidationError(Errors[2])
        else:
            raise ValidationError(Errors[1])
拼接URL是指将不同的字符串或资源路径组合成一个完整的URL链接。在华为OD中,可能会遇到需要进行URL拼接的问题。 URL拼接通常需要注意以下几个方面: 首先,要确保URL的格式正确。一个标准的URL由协议、主名、路径和查询参数组成。其中协议通常是http或https,主名是指要访问的服务器域名或IP地址,路径是指资源在服务器上的位置,查询参数是附加在URL末尾以便传递给服务器的数据。 其次,要注意字符串拼接的顺序和格式。根据需求,可以使用字符串拼接函数或操作符将各个部连接起来。在拼接过程中,要注意添加适当的隔符,如斜杠“/”或问号“?”等,以确保拼接后的URL格式正确。 另外,还需要注意转义特殊字符。如果URL中包含特殊字符,如空格、中文或特殊符号等,需要进行URL编码。这可以通过使用URL编码函数或库来实现。编码可以确保URL在传输过程中不会出现问题,并且服务器能够正确解析URL中的特殊字符。 最后,要进行URL合法性检查。在拼接URL之前,可以对输入的字符串进行一些合法性验证。这可以包括检查字符串是否为空、是否包含非法字符或其他错误。 综上所述,拼接URL是在华为OD中可能出现的问题之一。在处理此类问题时,需要注意URL格式的正确性、字符串的拼接顺序和格式、特殊字符的转义以及URL的合法性检查等方面。通过合理使用字符串拼接函数和URL编码函数,可以有效地完成URL拼接任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值