用Python校验身份证号码真伪

发布网友

我来回答

1个回答

热心网友

#这个算法都给了,应该比较简单吧。我也很菜,随意写了一个。异常没做,你可以自##己加一下。做一些验证过滤。不知道随机是不是真是随意随机,我没有按照身份证规##则做随机。是真的随机了18位。。。 如果你有规则,也可以自己写一个。
import random

yushu=[x for x in range(0,11)] 
ma=['1','0','X','9','8','7','6','5','4','3','2','1']

def yanzheng(nid):

dicma=dict(zip(yushu,ma))

sum=0

for x,y in enumerate(nid[:-1]):

sum+=((2**(18-x-1))%11)*int(y) #17位对应系数相乘的和

   if nid[-1]==dicma[sum%11]: #校验码对照
   return '%s True'%nid
   else:
   return '%s False'%nid
def readfile(fname):
f=open(fname,'rb')
for line in f.readlines():
print  yanzheng(line.strip())
f.close()
def randnum():
idstr=''
for i in range(17): #前17位随机
idstr+=str(random.randint(0,9))

idstr+=random.choice(ma) #最后一位从列表种随意一个,因为有X
return idstr


if __name__=="__main__":
nid=raw_input('Please enter your ID: ') #用户输入ID,没做任何验证
print yanzheng(nid)  #验证身份证
readfile('id.txt')   #从文件读出来 再验证
print yanzheng(randnum())  #随机一个 在验证

追问

读文件部分出了问题,请问我该怎么改

追答

提示你没有那个文件啊。。。。。

你自己不得先建立一个文本文件吗?。。。

建好写10个身份证号,每个一行。

路径写对。

当然这中间你可以做各种*,我没写那么多。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com