代码拉取完成,页面将自动刷新
import re
def calc_verify(idno: str) -> str:
"""
功能:计算身份证号的第18位,即验证位。
过程:将身份证号码第1到17位分别乘以权值,再求和,最后对11求余。
"""
# 第1到17位号码的权值
rate = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 验证位,余数为0到11对应的校验码
verify = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]
# 保存加权和
sum = 0
for index, char in enumerate(idno):
if index <= 16:
sum += int(char) * rate[index]
result = sum % 11
return verify[result]
def isValid(idno: str, strict=True) -> dict[bool, str]:
"""
功能:验证身份证号码是否合法
参数:idno,字符串,身份证号码
返回:字典,{"result": True/False, "msg": "提示信息。"}
"""
valid = True
msg = ""
if not strict:
idno=idno.upper()
result = re.match("^\d{17}[\dX]$", idno)
# 检测错误类型,返回结果
if not result:
valid = False
msg = "身份证号码长度不是18位,或者含有非法字符。"
else:
if strict:
_calc = calc_verify(idno)
if _calc == idno[17]:
msg = "OK"
else:
valid = False
msg = "身份证号验证不通过,请检查输入是否有误。"
return {"result": valid, "msg": msg}
if __name__ == '__main__':
ids = ["1", "510824a19771117903", "510824201511179034", "5108012001123080621"]
for id in ids:
r = isValid(id, strict=False)
print(r)
print("-"*30)
for id in ids:
r = isValid(id)
print(r)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。