通过身份证号码提取人员基础信息的代码
import datetime
import re
def IDcard_check(IDcard):
'''校验身份证号码是否正确'''
if IDcard is None:
return False,'身份证号不能为空!'
if len(IDcard) != 18:
return False,'身份证号长度错误!'
if not(IDcard[0:17].isdigit()):
return False,'身份证号格式错误!'
if (int(IDcard[6:10]) % 4 == 0 or (int(IDcard[6:10]) % 100 == 0 and int(IDcard[6:10]) % 4 == 0)):
# 出生日期闰年时合法性正则表达式
birthday = re.compile('[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$')
else:
# 出生日期平年时合法性正则表达式
birthday = re.compile('[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$')
if not(re.match(birthday, IDcard)):
return False,'身份证号出生年月校验错误!'
mod = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
jym = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
sum = 0
for i in range(0, 17):
sum += int(IDcard[i])*mod[i]
sum %= 11
if (jym[sum]) == IDcard[17]:
return True,'格式正确'
else:
return False,'格式错误'
def get_sex_by_IDcard(IDcard):
'''通过身份证获取性别'''
if IDcard is None:
return None
if IDcard_check(IDcard):
if int(IDcard[16:17]) % 2 == 0:
return '女'
else:
return '男'
else:
return None
def get_birthday_by_IDcard(IDcard):
'''通过身份证获取生日'''
if IDcard is None:
return None
if IDcard_check(IDcard):
return IDcard[6:14]
else:
return None
def get_age_by_IDcard(IDcard):
'''通过身份证获取当前年龄'''
try:
if birthday:=get_birthday_by_IDcard(IDcard):
birthday = datetime.datetime.strptime(birthday,'%Y%m%d')
age = (datetime.datetime.now() - birthday).days // 365
return age
except:
...
return None
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.