weixin_44987553 2019-04-27 21:20 采纳率: 0%
浏览 3721

Python程序问题校验身份证号码。

题目如下:
校验身份证号码并输出个人信息

描述‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬

中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。
如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2. 将这17位数字和系数相乘的结果相加。
3. 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10
分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
  4. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码,如身份证号码不合法输出 '身份证校验位错误!',如身份证号码合法则分别在4行中输出'身份证号码校验为合法号码!',并输出该人的出生年月日和性别。

我的程序如下:
myID=input()
s=(myID[0])*7+(myID[1])*9+(myID[2])*10+(myID[3])*5+(myID[4])*8+(myID[5])*4+(myID[6])*2+(myID[7])*1+(myID[8])*6+(myID[9])*3+(myID[10])*7+(myID[11])*9+(myID[12])*10+(myID[13])*5+(myID[14])*8+(myID[15])*4+(myID[16])*2
d=int(s) % 11
if (d==0 and myID[17]==1) or (d==1 and myID[17]==0) or (d==2 and myID[17]==X) or (d==3 and myID[17]==9) or (d==4 and myID[17]==8) or (d==5 and myID[17]==7) or (d==6 and myID[17]==6) or (d==7 and myID[17]==5) or (d==8 and myID[17]==4) or (d==9 and myID[17]==3) or (d==10 and myID[17]==2):
print("身份证号码校验为合法号码!")
print("出生:{}年{}月{}日".format(myID[6:10],myID[10:12],myID[12:14]))
if (myID[16])%2==0:
print("性别:女")
else:
print("性别:男")
else:
print("身份证校验位错误!")
但是只对了一半我想知道哪里有问题

  • 写回答

1条回答 默认 最新

  • 向着未来生长 2020-06-20 05:48
    关注

    字符串也能用偏移量取值?

    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试