引用

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 320105198209275127

Valid

分享到:

2009-09-07 20:47

浏览 4260

评论

1 楼

lseeo

2009-09-09

非常不错!

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

  1. python判断邮件发送成功_【基本解决】python中用SMTP发送QQ邮件提示成功但是收件人收不到邮件...

    折腾: 期间, 已经用了smtp的ssl去发送邮件了,但是结果: 第二收件人也没有收到邮件... 那去把端口号从465改为587: smtpPort=587, 结果直接出错: smtpObj = sm ...

  2. python验证身份证真伪_验证身份证的真伪,博客系统、个人博客、PHP、Linux、MySQL、python、前端技术、WEB知识...

    摘要:验证身份证的真伪<?php functionisIdCard($number){ $sigma=''; //加权因子 $wi=array(7,9,10,5,8,4,2,1,6,3,7,9, ...

  3. python 判断 字串包含_数百道BAT等大厂最新Python面试真题,学到你手软!

    春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法.提升 Python 编程能力,总是大有裨益的.今天,小编发现了一份好资源:Python 实现的面试题集锦! ...

  4. python 公众号爬虫_微信公众号文章爬虫

    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章.抓取公众号的所有的文章,需要获取两个比较重要的参数.一个是微信公众号的唯一I ...

  5. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  6. python判断哪个数最小_怎么用python比较三个数大小

    大部分初学编程的人来说刚开始都会练习判断两个数或者三个数的大小,来熟悉某种语言的特性和最基本的if,else循环,当我们学习了更高级的语法知识后,又会有不同的实现方式,比如依次接收用户输入的3个数,排 ...

  7. python判断奇数和偶数_从Python中的给定列表中提取偶数和奇数

    python判断奇数和偶数 In this problem, we are given a list by the user which may be the mixture of even and ...

  8. python判断题题库_《Python程序设计》判断题1-240题

    1.Python是一种跨平台.开源.免费的高级动态编程语言.(对) 2.Python 3.x完全兼容Python 2.x.(错) 3.Python 3.x和Python 2.x唯一的区别就是:prin ...

  9. python在采购中应用_实例13:用Python批量查询采购物料交期及实际收货日期

    我们在实例10中介绍了工程部采购物料用于新产品开发,如何从杂乱的备注栏获取工程采购单号.获取到采购单号,只是第一步,随后还需要查询物料的交期和实际收货日期. 对于负责物料跟进的员工,每个新产品开发订单 ...

最新文章

  1. 【Python】Python语言学习:设计模式、单例模式
  2. Linux安装包deb和rpm格式,deb格式和rpm格式是什么?_网站服务器运行维护
  3. python邮件添加附件_如何向电子邮件python添加多个附件
  4. 实现网站验证码切换功能
  5. 【slowfast 减少ava数据集】将ava数据集缩小到2个,对数据集做训练,然后进行检测,为训练自己的数据集做准备
  6. php include 和require的区别与转码
  7. gerber文件_90%的工程师容易忽视(一):PCB输出gerber文件,这样操作才正确
  8. 正经人一辈子都用不到的 JavaScript 方法总结 (一)
  9. django 业务代码写哪儿_测试人员快速上手Django指南
  10. 力扣-268 丢失的数字
  11. (转载) linux安装JDK
  12. 国美易卡RMAN客户端工具,国美易卡备份有效数据
  13. 从端到云:飞腾平台全栈解决方案白皮书
  14. PL-2303HX新版驱动
  15. 嵌入式平台ssh开发环境搭建
  16. 求素数/质数 简单Java算法
  17. 美团小哥用计算机,美团回应大V与美团小哥争议一事:鲁莽不会让世界变好!...
  18. 各大数据库厂商怎样看竞争对手
  19. Java斐波那契数列
  20. 微信小程序 WebSocket 通信 —— 在线聊天

热门文章

  1. 使用Cplex求解均值方差模型
  2. WEBSHELL姿势之SQL一句话
  3. 记Git报错-Everything up-to-date
  4. 五个招数告诉你怎么让网站内容快速让百度收录
  5. Entering emergency mode. Exit the shell to continue.。。。
  6. Excel文件打开后不能编辑,可以这样处理
  7. Debug以及解题思路
  8. 1024·程序员节校园编程专业活动策划(低调版)
  9. 最短路径之弗洛伊德算法(Floyd)——动态规划
  10. 【前沿技术RPA】 一文了解 UiPath 状态机 State Machine