身份證校驗碼的計算方法
1、將前面的身份證號碼17位數分別乘以不同的系數。第i位對應的數為[2^(18-i)]mod11。從第一位到第十七位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;
2、將這17位數字和系數相乘的結果相加;
3、用加出來和除以11,看余數是多少?;
4、余數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最后一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2;
5、通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果余數是10,身份證的最后一位號碼就是2;
例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。
首先:我們得出,前17位的乘積和是189
然后:用189除以11得出的結果是17 + 2/11,也就是說余數是2。
最后:通過對應規則就可以知道余數2對應的數字是x。所以,這是一個合格的身份證號碼。
以下來自:http://www.cnblogs.com/Death/archive/2011/03/24/1993565.html
# -*- coding:gbk -*- #S+=Sum(Ai*Wi); #Ti[S%11] import sys class IdentityCard: def __init__( self ): self.__Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] self.__Ti = ['1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2'] def check( self, code ): if (len(code) != 17): print "必須為17位的字符" return False return True def calculate( self, code ): sum = 0 for i in range(17): sum += int(code[i])*self.__Wi[i] return self.__Ti[sum%11] def test(): ic = IdentityCard() code = "33000000000000000" #17位身份證 if ic.check(code): print "你的校驗位為:%s"%ic.calculate(code) if __name__ == '__main__': test()