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()

 

时间: 2024-11-03 08:29:16

python实现身份证校验位计算的相关文章

用sql实现18位身份证校验代码分享 身份证校验位计算_MsSql

身份证校验码的计算方法 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: 复制代码 代码如下: with

用sql实现18位身份证校验代码分享 身份证校验位计算

身份证校验码的计算方法 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: 复制代码 代码如下:with t

python使用datetime模块计算各种时间间隔的方法

 这篇文章主要介绍了python使用datetime模块计算各种时间间隔的方法,实例分析了Python使用datetime模块进行各种常用的时间操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python使用datetime模块计算各种时间间隔的方法.分享给大家供大家参考.具体分析如下: python中通过datetime模块可以很方便的计算两个时间的差,datetime的时间差单位可以是天.小时.秒,甚至是微秒,下面的代码就演示了datetime模块在计算时间差时的

python使用range函数计算一组数和的方法

  这篇文章主要介绍了python使用range函数计算一组数和的方法,涉及Python中range函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python使用range函数计算一组数和的方法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 sum = 0 numbers = range(1,10) for i in numbers: sum += i print(sum) 运行结果为:45 希望本文所述对大家的Python程序设计有所帮助.       

python实现逆波兰计算表达式的方法

  这篇文章主要介绍了python实现逆波兰计算表达式的方法,较为详细的分析了逆波兰表达式的概念及实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下 逆波兰表达式又叫做后缀表达式.在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示.波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法.按此方法,每一运算符都置于其运算对象之后,故称为后缀表示. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Excel表格中身份证号计算出年龄岁数的函数

  例如:比如 134433196812033012 怎么转化为年龄? 据说可以使用DATEDIF函数,请教烈火大大. 如果身份证号在A2,在要算年龄的单元格输入 =DATEDIF(TEXT(MID(A2,7,8),"0000-00-00"),TODAY(),"y") 在上面的文字中,蓝色代表了单元有身份证的单元格,一定要填写正确哦,否则是算不出来的. 看下图: 计算出年龄岁数的函数-表格身份证号计算年龄"> 学会了吗?如果还有什么问题,请在下面给烈

根据身份证号码计算出生日期、年龄、性别(18位) 根据入职时间计算工龄。_正则表达式

1.根据身份证号码计算出生日期.年龄.性别(18位) 复制代码 代码如下: //获取输入身份证号码 var UUserCard = $("#UUserCard").val(); //获取出生日期 //UUserCard.substring(6, 10) + "-" + UUserCard.substring(10, 12) + "-" + UUserCard.substring(12, 14); //获取性别 if (parseInt(UUser

《从问题到程序:用Python学编程和计算》——1.3 程序开发

1.3 程序开发 在用Python学习编程时,自然需要了解Python语言,但更重要的是学习.理解和运用人们长期程序设计工作总结出的经验,包括正确的思考问题方法.正确的程序开发方法以及一些有益的常规做法,还要养成良好的编程习惯.随着学习的深入,需要解决的问题也会变得越来越复杂(当然,实际中的问题和解决它们的程序更复杂得多).比较复杂的东西不是随随便便就能做好的,需要认真工作,也需要正确的工作方法.本书中许多地方提出了这些方面的建议,希望引起读者的重视. 本节简单讨论程序的开发过程,包括程序的设计

《从问题到程序:用Python学编程和计算》——第1章 程序设计和Python 1.1 计算机和程序

第1章 程序设计和Python 我们已经生活在信息时代,环顾四周,信息技术的影响无处不在.由于信息科学技术的发展和应用,我们的世界的方方面面都与20年前大不相同了,例如: 个人生活:看看人们在每天生活中做的各种事情,有多少是在与屏幕键盘(可能是触摸屏)交互,这些都是20年前没有的事情. 人际交流:20年前的人际交流方式很简单.除面对面交流外,只能通过纸笔写信或长途电话(要找专门的电话或者到电话局).今天人手一部手机,可以通过电话.短信.各种网络即时消息相互交流.电子邮件也是私人之间的交流媒介,而