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