模拟生成身份信息及查验身份——姓名和性别 python
时间: 2023-11-23 22:07:08 浏览: 190
生成身份信息:
```python
import random
# 生成随机姓氏
def generate_surname():
surnames = ['赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈']
return random.choice(surnames)
# 生成随机名字
def generate_name(gender):
if gender == '男':
names = ['伟', '刚', '勇', '毅', '俊', '峰', '强', '军', '平', '涛']
else:
names = ['芳', '娜', '娟', '霞', '玲', '秀', '英', '华', '慧', '巧']
return random.choice(names)
# 生成随机性别
def generate_gender():
genders = ['男', '女']
return random.choice(genders)
# 生成身份证号码
def generate_id_card():
# 前6位为地址码,粗略取北京市海淀区的一个区号
address_code = '110108'
birth_year = random.randint(1950, 2000)
birth_month = random.randint(1, 12)
birth_day = random.randint(1, 28)
# 根据出生日期生成顺序码
order_code = '{:03d}'.format(random.randint(1, 999))
# 根据性别生成最后一位校验码
gender_code = random.choice(['0', '2', '4', '6', '8'])
id_card = address_code + '{:04d}{:02d}{:02d}{}{}'.format(birth_year, birth_month, birth_day, order_code, gender_code)
return id_card
# 生成身份信息
def generate_identity():
surname = generate_surname()
gender = generate_gender()
name = generate_name(gender)
id_card = generate_id_card()
return {'name': surname+name, 'gender': gender, 'id_card': id_card}
# 测试生成身份信息
identity = generate_identity()
print(identity)
```
查验身份信息:
```python
# 验证身份证号码是否合法
def check_id_card(id_card):
# 校验码权重
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']
if len(id_card) != 18:
return False
if not id_card[:17].isdigit():
return False
# 计算校验码
sum = 0
for i in range(len(id_card)-1):
sum += int(id_card[i]) * weight[i]
if check_code[sum % 11] != id_card[-1]:
return False
return True
# 测试身份证号码合法性
print(check_id_card(identity['id_card']))
```
注:身份证号码的校验规则比较复杂,本示例只是简单地验证了位数、前17位是否为数字、校验码是否正确等基本规则,实际应用中需根据需要进行完善。