身份证号码合法性检验(python)

该博客介绍了在安全测试中如何验证身份证号码的合理性。通过编写Python代码,利用数学公式计算身份证号码的校验码,并使用字典匹配来确定最后一位,从而检查身份证号码是否合法。这种方法有助于测试注册过程中的信息安全性。

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

合法性校验

在安全测试的过程中经常遇到使用身份证注册,造成信息泄露,或者是造成任意信息注册,就需要构造一些看起来合理的号码,进行测试,为了方便就打算自己写一个校验是否合理。

a=input("输入身份证前17位,最后一位不输入:")
b=[int(a[i]) for i in range(len(a))]
c=7*b[0]+9*b[1]+10*b[2]+5*b[3]+8*b[4]+4*b[5]+2*b[6]+1*b[7]+6*b[8]+3*b[9]+7*b[10]+9*b[11]+10*b[12]+5*b[13]+8*b[14]+4*b[15]+2*b[16]
d=c%11
dict1={0:1,1:0,2:'X',3:9,4:8,5:7,6:6,7:5,8:4,9:3,10:2}
print("合理的身份证号应该是:",a+str(dict1[d]))

为了方便,采用字典的方式进行匹配,减少代码量

### Python 实现身份证号码验证算法 身份证号码由18位组成,前17位为数字,最后一位可以是数字或字母X。为了确保身份证的有效性,可以通过加权因子和校验码来进行验证。 #### 加权因子计算 每位数字乘以其对应的权重系数并求和: \[ S = \sum_{i=0}^{16}(ID[i]*Wi) \% 11 \] 其中 \( ID[i] \) 表示第 i 位上的数值,\( Wi \) 是预先定义好的权重列表[^2]。 ```python 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'] ``` #### 计算校验码 根据上述公式得到的结果,在模11的基础上找到相应的校验字符并与输入字符串的最后一项对比来判断合法性: 如果两者一致,则说明该身份证号合法;反之则不合法。 ```python def validate_id_number(id_num): if len(id_num) != 18 or not (id_num[:-1].isdigit() and id_num[-1] in check_codes): return "身份证号码位数不对!" try: sum_result = sum(int(digit)*weight for digit, weight in zip(id_num[:17], weights)) % 11 expected_check_code = check_codes[sum_result] if id_num[-1].upper() == expected_check_code: return "验证通过!" else: return "身份证号码校验错误!" except ValueError as e: return f"身份证号码出生日期超出范围或含有非法字符!: {e}" ``` 此函数会返回不同的消息提示以表明验证过程中的各种情况,如身份证长度不符、存在非数字字符等问题都会被捕捉到并给出相应反馈[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值