一个计算身份证号码校验位的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实现调用其他python脚本的方法
Oct 05 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
使用python为mysql实现restful接口
Jan 05 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
python去除扩展名的实例讲解
Apr 23 Python
PyTorch线性回归和逻辑回归实战示例
May 22 Python
python实现图片识别汽车功能
Nov 30 Python
python 内置模块详解
Jan 01 Python
对python中各个response的使用说明
Mar 28 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
Python logging模块写入中文出现乱码
May 21 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
php数组去重的函数代码
2013/02/03 PHP
PHP整合PayPal支付
2015/06/11 PHP
JavaScript效率调优经验
2009/06/04 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
jquery attr 设定src中含有&(宏)符号问题的解决方法
2011/07/26 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
javascript中Function类型详解
2015/04/28 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
2016/04/18 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
jQuery中Nicescroll滚动条插件的用法
2016/11/10 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
详解Python中 __get__和__getattr__和__getattribute__的区别
2016/06/16 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
详解python和matlab的优势与区别
2019/06/28 Python
python装饰器代码深入讲解
2021/03/01 Python
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
大班幼儿评语大全
2014/04/30 职场文书
工作保证书怎么写
2015/02/28 职场文书
会议通知格式范文
2015/04/15 职场文书
开展警示教育活动总结
2015/05/09 职场文书
花木兰观后感
2015/06/10 职场文书
安全教育主题班会教案
2015/08/12 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书