700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 用python判断身份证号性别_验证身份证号的Python脚本

用python判断身份证号性别_验证身份证号的Python脚本

时间:2023-05-24 10:29:47

相关推荐

用python判断身份证号性别_验证身份证号的Python脚本

引用

a[0], a[1], a[2], a[3], ..., a[16], a[17]

其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10

每一位被赋予一个“权值”,其中,第i位的权值w[i]的计算方法是:

引用

w[i] = 2**(17-i) % 11

其中,i=0,1,2,3,...,17,运算符按Python惯例:x**y表示x的y次方,x%y表示x除以y的余数。

如果一个身份证号是正确的,那么:

引用

(a[0]*w[0] + a[1]*w[1] + a[2]*w[2] + ... + a[16]*w[16] + a[17]*w[17]) % 11 == 1

实际上,校验位a[17]的计算方法,就是巧妙地选择一个值使得上式成立。

根据上述算法,下面是一个验证身份证号正确性的程序。

可以通过命令行输入。第一个命令行参数是身份证号。输出Valid或Invalid。

#!/usr/bin/env python

# -*- coding: utf-8 -*-

USAGE="""\

USAGE: python shenfenzheng.py shenfenzhenghao

"""

chmap = {

'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,

'x':10,'X':10

}

def ch_to_num(ch):

return chmap[ch]

def verify_string(s):

char_list = list(s)

num_list = [ch_to_num(ch) for ch in char_list]

return verify_list(num_list)

def verify_list(l):

sum = 0

for ii,n in enumerate(l):

i = 18-ii

weight = 2**(i-1) % 11

sum = (sum + n*weight) % 11

# print "i=%d,weight=%d,n=%d,sum=%d"%(i,weight,n,sum)

# print sum

return sum==1

if __name__=='__main__':

import sys

if len(sys.argv)!=2:

print USAGE

sys.exit(1)

result = verify_string(sys.argv[1])

if result:

print "Valid"

else:

print "Invalid"

命令行使用举例:

引用

$ python shenfenzheng.py 35198209275127

Valid

分享到:

-09-07 20:47

浏览 4260

评论

1 楼

lseeo

-09-09

非常不错!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。