一个计算身份证号码校验位的Python小程序


Posted in Python onAugust 15, 2014

S = Sum(Ai * Wi), i=0,.......16 (现在的身份证号码都是18位长,其中最后一位是校验位,15位的身份证号码好像不用了)

Ai对应身份证号码,Wi则为用于加权计算的值,它一串固定的数值,应该是根据某种规则得出的吧,用于取得最好的随机性,Wi的取之如下:

7   9 10 5
8   4   2   1
6   3   7   9
10  5   8   4   2

经过加权计算之后,得到一个S,用这个S去模11,取余值,然后查表得到校验位,这个索引表如下:

0 ----- 1
1 ----- 0
2 ----- x
3 ----- 9
4 ----- 8
5 ----- 7
6 ----- 6
7 ----- 5
8 ----- 4
9 ----- 3
10 ----- 2

程序代码如下:

import sys

Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7,9, 10, 5, 8, 4, 2]
IndexTable = { #此处实际是无需使用字典的,使用一个包含11个元素的数组便可,数组中存放
        0 : '1', #相应位置的号码,但是这也正好演示了Python高级数据结构的使用
        1 : '0',
        2 : 'x',
        3 : '9',
        4 : '8',
        5 : '7',
        6 : '6',
        7 : '5',
        8 : '4',
        9 : '3',
        10 : '2'
    }
No = []
sum = 0
if (len(sys.argv[1:][0]) != 17):
    print "error number"
    sys.exit()
for x in sys.argv[1:][0]:
        No.append(x)
for i in range(17):
    sum = sum + (int(No[i]) * Wi[i])
Index = sum % 11
print "So, your indicates parity is : %s" % (IndexTable[Index])

运行程序方式如下:

#python getParity.py your-indentity-number-but-except-the-last-number

我的天啊,Python内置的数据结构是如此强大而易用,越来越为之而着迷啊,继续diving~

用函数封装一下,改进的代码如下:

import sys

if __name__ != '__main__':
  print "Cannot run in module"
  sys.exit()

Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7,9, 10, 5, 8, 4, 2]
IndexTable = {
    0 : '1',
    1 : '0',
    2 : 'x',
    3 : '9',
    4 : '8',
    5 : '7',
    6 : '6',
    7 : '5',
    8 : '4',
    9 : '3',
    10 : '2'
  }

def check(identity):
  if(len(identity) == 0):
    print "please input your identity number"
    sys.exit()
  elif (len(identity[0]) != 17):
    print "error number"
    sys.exit()

def calculate(identity):
  No = []
  sum = 0
  for x in identity[0]: #这个方法是很笨拙的,直接使用No = list(identity[0])便可达到同样的目的
    No.append(x)

  for i in range(17):
    sum = sum + (int(No[i]) * Wi[i])

  Index = sum % 11
  return IndexTable[Index]

check(sys.argv[1:])
result = calculate(sys.argv[1:]) 

print "So, your indicates parity is : %s" % (result)

忘记函数原型吧,这里不需要指明返回值类型,不需要指明形参数据类型。

Python 相关文章推荐
Python自动化测试工具Splinter简介和使用实例
May 13 Python
Python中的True,False条件判断实例分析
Jan 12 Python
Python获取任意xml节点值的方法
May 05 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
Python基于pillow判断图片完整性的方法
Sep 18 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 Python
Python回文字符串及回文数字判定功能示例
Mar 20 Python
Python 中Django安装和使用教程详解
Jul 03 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
python中Pyqt5使用Qlabel标签播放视频
Apr 22 Python
基于Python的身份证号码自动生成程序
Aug 15 #Python
Python异常处理总结
Aug 15 #Python
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 #Python
Python3基础之函数用法
Aug 13 #Python
Python3基础之条件与循环控制实例解析
Aug 13 #Python
Python3基础之基本运算符概述
Aug 13 #Python
Python3基础之list列表实例解析
Aug 13 #Python
You might like
PHP n个不重复的随机数生成代码
2009/06/23 PHP
删除重复数据的算法
2006/11/23 Javascript
基于jquery实现一张图片点击鼠标放大再点缩小
2013/09/29 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python中property和setter装饰器用法
2019/12/19 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
品学兼优的大学生自我评价
2013/09/20 职场文书
中年人生感言
2014/02/04 职场文书
学前教育专业求职信
2014/09/02 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
起诉书格式范文
2015/05/20 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL