一个计算身份证号码校验位的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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python中的生成器和yield详细介绍
Jan 09 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
Python实现基于权重的随机数2种方法
Apr 28 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
Django开发的简易留言板案例详解
Dec 04 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
如何清空python的变量
Jul 05 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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时间格式控制符对照表分享
2013/07/23 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
2016/05/31 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
Element-UI+Vue模式使用总结
2020/01/02 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python使用django搭建web开发环境
2017/06/09 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Pycharm连接远程服务器并实现远程调试的实现
2019/08/02 Python
python实现简单日志记录库glog的使用
2019/12/13 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
四查四看剖析材料
2014/02/14 职场文书
创建学习型党组织实施方案
2014/03/29 职场文书
平面设计专业求职信
2014/08/09 职场文书
村干部任职承诺书
2015/01/21 职场文书