当前位置: 首页 > 后端技术 > Python

20行Python代码完成18位身份证验证

时间:2023-03-26 11:48:24 Python

中国身份证的格式中国18位身份证是在最后一位加上17位校验码生成的https://www.wikiwand.com/zh/%...1~3代表省(市)和自治区)/市(自治州)/区/县4代表出生日期5代表派出所代码6代表性别奇数为男,偶数为女7为校验码与首位对比17位计算校验码是否合法如何计算前17位结果呢?根据中华人民共和国国家标准GB11643-1999,中华人民共和国公民号码校验码的计算方法为ISO7064:1983.MOD11-2校验码计算方法——自维基百科参考计算步骤##计算17位数字的每一位与对应的权重因子S=1*7+2*9+3*10+...7*2##计算余数检查根据余数查表得到校验码index=Smod11ckcodes=('1','0','X','9','8','7','6','5','4','3','2')code=ckcodes[index]##最后比较校验码是否等于最后一位。代码等于最后一位。代码实现#ID验证importreIDCARD_REGEX='[1-9][0-9]{14}([0-9]{2}[0-9X])?'defis_valid_idcard(idcard):"""验证id卡有效。"""如果isinstance(idcard,int):idcard=str(idcard)如果不是re.match(IDCARD_REGEX,idcard):返回错误因素=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]items=[int(item)foriteminidcard[:-1]]copulas=sum([a*bfora,binzip(factors,items)])ckcodes=['1','0','X','9','8','7','6','5','4','3','2']返回ckcodes[copulas%11].upper()==idcard[-1].upper()

猜你喜欢