1 Star 0 Fork 0

赵明 / 验证身份证号码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
VerifyIdNo.py 1.69 KB
一键复制 编辑 原始数据 按行查看 历史
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)
Python
1
https://gitee.com/cmdnotepad/verify-id-no.git
git@gitee.com:cmdnotepad/verify-id-no.git
cmdnotepad
verify-id-no
验证身份证号码
master

搜索帮助