一个计算身份证号码校验位的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函数返回多个值的示例方法
Dec 04 Python
python解决网站的反爬虫策略总结
Oct 26 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
详解django实现自定义manage命令的扩展
Aug 13 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
python读写文件write和flush的实现方式
Feb 21 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
Python几种常见算法汇总
Jun 02 Python
Python字符串格式化常用手段及注意事项
Jun 17 Python
使用Python实现音频双通道分离
Dec 25 Python
pandas针对excel处理的实现
Jan 15 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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实现无限级分类实现代码(递归方法)
2011/01/01 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
php中请求url的五种方法总结
2017/07/13 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
JS实现仿百度文库评分功能
2017/01/12 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
独特的python循环语句
2016/11/20 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
加入学生会演讲稿
2014/04/24 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
工伤调解协议书
2016/03/21 职场文书
Linux安装Docker详细教程
2022/07/07 Servers