中华人民共和国公民身份号码校验

source: http://zh.wikipedia.org/wiki/中华人民共和国公民身份号码

#!/usr/bin/python

import re;

#定义验证函数
def IC_chk(ic_serial):
#权重数组
iW = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];
#身份证号码中可能的字符
values = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'x']
#使用正则表达式检测
icre = re.compile('^[1-9][0-9]{16}[x0-9]$', re.IGNORECASE);
m = icre.match(ic_serial);
if m:
pass;
else:
#不是合法的身份证号码,直接退出
return False;

S = 0;
for i in range(0,17):
S += int(ic[i]) * iW[i];

chk_val = (12 - (S % 11)) % 11;

return ic_serial[17].lower() == values[chk_val];

#测试验证函数
ic = raw_input("Please input IC serial: ");
if IC_chk(ic):
print "Correct IC Serial!";
else:
print "Wrong IC Serial!";

 

你可能感兴趣的:(校验)