python身份证城市定位程序输入点_有关一道身份证的python编程题

有关一道身份证的题目,要求python解决

就昨天晚上嗷一个妹纸问我这样一道问题哈:

问题:

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10

M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

原题位置

出于撩妹的需要(手动狗头)我昨天晚上写了一下结果十行就有九行的BUG我。。。

于是乎我今天接着搞,总算是把它giao了出来哈哈

这里我的代码比较辣鸡哈哈大伙可能看得比较扎心。。。

##将传来的字符串变成数字组成的列表

def change(idstring):

idlist=list(idstring)

idnum=[]

for i in idlist: ##从此处开始其实我也是查的别人家的代码(尬笑)

try:

m=int(i)

idnum.append(m)

except ValueError:

i=None

return idnum

##判断这个身份证号码符不符合规定

def judge3(idstring): ##为啥叫3呢因为昨天晚上写了俩都是错的(尬笑)

idnum=change(idstring)

for crossz in idnum[0:17]:

if type(crossz)==False:tf=0

break

z=(7*idnum[0]+9*idnum[1]+10*idnum[2]+5*idnum[3]+8*idnum[4]+4*idnum[5]+2*idnum[6]+1*idnum[7]+6*idnum[8]+3*idnum[9]+7*idnum[10]+9*idnum[11]+10*idnum[12]+5*idnum[13]+8*idnum[14]+4*idnum[15]+2*idnum[16])%11

if z==2 and len(idnum)==17:tf=1

elif len(idnum)==18 and z==0 and idnum[17]==1:tf=1

elif len(idnum)==18 and z==1 and idnum[17]==0:tf=1

elif len(idnum)==18 and idnum[17]==12-z:tf=1

else : tf=0

return tf

##输入身份证号并创建列表,这里搞的skr字符串列表毕竟身份证号码里面可能有叉

def key_in():

max=eval(input("how many numbers:"))##告诉程序你要输入多少个身份证号码它先做个心理准备

u=[]

start=0

while start

prim=input().split('\n')

u+=prim

start+=1

return u

##组装前面的代码段,使其结构化

def main():

u=key_in() ##调用输入函数并创建列表

fourze=1 ##这里纯粹是纪念假面骑士fourze(变身?)

for item in u:

fourze*=judge3(item)

if fourze==1:print("All passed")

else:

for items in u:

if judge3(items)==0:print(items)##把不合要求的身份证号码拉出来然后警察叔叔去找人然后抓起来(迷惑行为)

##准备调用了嗷

main()

代码跑一跑发现没啥问题,奶思(此处应有假笑男孩表情包)

晚上就单纯的想着判断函数,然鹅输入的身份证号是个字符串,先要变成数字的列表才能够对每个元素进行运算于是就加一个转化函数。接着我在主框里面自定义了三个身份证号码(我瞎编的嗷),看起来可以跑。现在就是用户的循环输入了,今天就加了一个键入的模式。顺便还看了看大神们的博客,学学split的用法。

组装完成了就把它放到题目的环境里面,并按照要求进行了一点修改,发现还是可以跑的。

标签:17,号码,python,编程,idnum,##,身份证,tf

来源: https://blog.csdn.net/qq_46253658/article/details/104844703

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值