zoukankan      html  css  js  c++  java
  • python实现身份证校验位计算

    身份证校验码的计算方法

    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()
  • 相关阅读:
    轻量模型之Mobilenet
    GAN的Loss
    Ubuntu16.04安装后配置一条龙
    Hardnet论文阅读
    orb-slam2编译时遇到的问题
    编译opencv+opencv_contrib
    Sophus库使用踩坑
    CloudCompare Viewer使用心得
    交通场景语义分割
    ROS编译中遇到的问题
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468254.html
Copyright © 2011-2022 走看看