一个计算身份证号码校验位的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读取Android permission文件
Nov 01 Python
Python中非常实用的一些功能和函数分享
Feb 14 Python
对Python中数组的几种使用方法总结
Jun 28 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
Python中shapefile转换geojson的示例
Jan 03 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
Python替换月份为英文缩写的实现方法
Jul 15 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
Python-openCV开运算实例
Jul 05 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
Nov 28 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
文章推荐系统(三)
2006/10/09 PHP
PHP自动选择 连接本地还是远程数据库
2010/12/02 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
使用phonegap克隆和删除联系人的实现方法
2017/03/31 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
协议书的格式
2014/04/23 职场文书
2014年党课学习材料
2014/05/11 职场文书
大学生赌博检讨书
2014/09/22 职场文书
2014年图书室工作总结
2014/12/09 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
幼儿园园长工作总结2015
2015/05/25 职场文书
警示教育观后感
2015/06/17 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS