5.中华人民共和国居民身份证号码由17位数字和1位校验码组成。其中,前6位为所在地编号,第7~14位为出生年月日,第15~17位为登记流水号,其中第17位偶数为女性,奇数为男性。效验码的生成规则如下:
将前面的身份证号码17位数字分别乘以不同的系数。第1~17位的系数分别为:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,将这17位数字和系数相乘的结果相加,用相加的结果与11求模,余数结果只能是0,1,2,3,4,5,6,7,8,9,10这11个数字,它们分别对应的最后一位身份证的号码为1,0,X,9,8,7,6,5,4,3,2。
例如:如果余数是2,最后一位数字就是罗马数字X,如果余数是10,则身份证最后一位就是2.
请设计程序实现输入18为身份证号,辨别其真伪。若为真,则进一步判断性别;若不是18位或身份证号非法,则提示重新输入。
提示:定义如下两个元组,对输入字符串进行遍历。
factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
last=(“1”, “0”, “X”, “9”, “8”, “7”, “6”, “5”, “4”, “3”, “2”)
这个问题如何解决?求指导
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- weixin_45571298 2019-10-22 17:39关注
factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
last = [1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2]id_num = input('输入身份证号码:')
if len(id_num) == 18:
count = 0
try:
for i in range(17):
count += int(id_num[i]) * factor[i]
except ValueError:
print('请输入数字')
last_num = last[count % 11]
if (id_num[17].lower() == last_num) or int(id_num[17]) == last_num:
print('身份证合法')
if int(id_num[16]) % 2:
print('男滴')
else:
print('女滴')
else:
print('不合法')
else:
print('输入有误,请重新输入')本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 visual studio2022中文乱码无法解决
- ¥15 关于华为5g模块mh5000-31接线问题
- ¥15 keil L6007U报错
- ¥15 webapi 发布到iis后无法访问
- ¥15 初学者如何快速上手学习stm32?
- ¥15 如何自动更换布娃娃图片上的衣服
- ¥15 心理学eprime编程
- ¥15 arduino esp8266开发
- ¥15 stm32单片机通过485发送命令给驱动器控制电机转动,同样的代码f103可以控制电机转动,换到f407不能动了,但是用串口助手调试407显示发送的命令都是正确的,卡了好久了这是发送规则
- ¥15 stm32f103c8t6最小系统板+2.8寸TFTLCD板子