一个计算身份证号码校验位的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常用小技巧总结
Jun 01 Python
Python六大开源框架对比
Oct 19 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python中Django 后台自定义表单控件
Mar 28 Python
Python常见异常分类与处理方法
Jun 04 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
numpy中loadtxt 的用法详解
Aug 03 Python
python调用支付宝支付接口流程
Aug 15 Python
python 3.6.7实现端口扫描器
Sep 04 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
用 Python 元类的特性实现 ORM 框架
May 19 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
咖啡与牛奶
2021/03/03 冲泡冲煮
php中计算程序运行时间的类代码
2012/11/03 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
vue2.0之多页面的开发的示例
2018/01/30 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
python算法学习之基数排序实例
2013/12/18 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
2015/04/04 Python
Python内建数据结构详解
2016/02/03 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
python socket网络编程之粘包问题详解
2018/04/28 Python
Python3多线程操作简单示例
2018/05/22 Python
python实现AES加密解密
2019/03/28 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
python 读取数据库并绘图的实例
2019/12/03 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
SQL面试题
2013/04/30 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
公司经理聘任书
2014/03/29 职场文书
法制宣传标语
2014/06/23 职场文书
授权委托书范文
2014/07/31 职场文书
2014年协会工作总结
2014/11/22 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏