栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 校验身份证号码 并输出对应省市县生日 demo

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 校验身份证号码 并输出对应省市县生日 demo

1.需求

2.代码实现
 
# _*_coding:utf-8_*_
import re
def validateIdCard(idCard):
    weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    sum = 0
    for i in range(len(idCard)):
        sum += int(idCard[i]) * weight[i]
    return check_code[sum % 11]
def passIdCard(idCard):
    idCardRegParttern = re.compile('^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$')
    res = re.match(idCardRegParttern, idCard)
    return res != None

def findArea(areaCode):
    # 1. 获取区域情况
    areaList = []
    with open('./area.js', 'rb') as file:
        temp = file.readline()
        while temp:
            areaList.append(temp.decode('utf-8'))
            temp = file.readline()
    # 2. 找地区
    provinceCode = areaCode[0:2]+"0000"
    cityCode = areaCode[0:4]+"00"
    provinceVal = ''
    cityVal = ''
    areaVal = ''
    for item in areaList:
        if item.startswith(provinceCode):
            provinceVal = item.split(",")[1].strip("n").strip("r")
        if item.startswith(cityCode):
            cityVal = item.split(",")[1].strip("n").strip("r")+'市'
        if item.startswith(areaCode):
            areaVal = item.split(",")[1].strip("n").strip("r")
    
    return provinceVal+cityVal+areaVal

def judge(idCard):
    if (validateIdCard(idCard[:17]) == idCard[17]):
        print('校验通过!')
    else:
        print('校验失败!')
        return
    if int(idCard[16]) % 2 == 0:
        print('性别:女')
    else:
        print('性别:男')
    print('生日:{}年{}月{}日'.format(idCard[6:10], idCard[10:12], idCard[12:14]))
    print('籍贯:{}'.format(findArea(idCard[0:6])))

def main():
    # idCard = "230182198012251659"
    # if passIdCard(idCard) == False:
    #     print("fail")
    # else:
    #     judge(idCard)
    while True:
        idCard = input('请输入身份证号码:')
        if passIdCard(idCard) == False:
            print("校验失败!")
        else:
            judge(idCard)

if __name__ == '__main__':
    main()

注:省市文件较大,放百度云了

链接:百度网盘 请输入提取码
提取码:xe9i

3.实现效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号