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小程序...相关推荐

  1. python验证身份证最后一位数字代表什么_身份证号最后一位是“X”,代表什么意思?...

    原标题:身份证号最后一位是"X",代表什么意思? 只是一个验证码,代表数字''10''. 由于计算机,也就是电脑的问世,人类已经进入一个数字时代,也就是信息时代,很多事情都用数字代 ...

  2. python计算身份证最后一位数字代表什么_身份证最后一位X代表什么数字

    展开全部 X的意思其实是10,只不过用罗马数字代替32313133353236313431303231363533e58685e5aeb931333365663431了而已,如果不用罗马数字代替的话, ...

  3. python验证身份证最后一位数字代表什么_身份证号码最后一位代表什么?

    展开全部 代表校验码(身份证最后一位).它是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码. 计算方法 1.将前面的62616964757a686964616 ...

  4. python验证身份证最后一位数字代表什么_身份证最后一位不是数字而是X,代表什么含义?涨知识了...

    身为公民都具有身份证,而证明我们身份的证件,上面身份证号码并不都是数字,而有的身份证最后一位是字母X,这代表什么意思呢?了解之后,涨知识了. 我之前是在采集单位上班,经常会输入一些身份证号码.我们都知 ...

  5. 如何用python计算年龄_用Python写一个能算出自己年龄的小程序

    用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...

  6. python写一个表白程序_用Python写一个能算出自己年龄的小程序

    用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...

  7. python聊天小程序支持私聊和多人_利用Python打造一个多人在线匿名聊天的小程序!(前后端完整开发)...

    用Python打造一个多人在线匿名聊天的小程序(附代码) 最近看到好多设计类网站, 都提供了多人在线匿名聊天的小功能, 感觉很有意思, 于是自己就用django框架写了一个, 支持手动实时更名, py ...

  8. python用bbp公式求圆周率_神奇的BBP公式,可独立计算圆周率任何一位数字,曾震惊数学界!...

    今天,我们来看一个神奇的关于圆周率的公式. 一千多年来,数学家们采用各种办法,来求圆周率的更高精度,比如我国伟大的数学家祖冲之(429-500,字文远),就曾利用复杂的割圆术,将圆周率精确到小数点第七 ...

  9. java 身份证第18位数字的算法

    原来在注册一个网站的时候,发现输入身份证会被验证出来. 即使前面的全正确,但是如果最后一位不正确的话,也会被验证出来的. 原来在身份证的号码,是有规则的.特别是最后一位. 下面是18位身份证最后一位的 ...

  10. excel计算日期时间差 8位数字转化成日期 excel输入天数计算日期 excel输入天数生成日期

    excel计算日期时间差 首先日期必须是这样的日期格式.如果是20190606这种非日期格式需要先转换成日期. 然后 直接 =D3-D2 就可以了 == 转化成日期  8位数字转化成日期 =DATE( ...

最新文章

  1. 华为 日志服务器 配置文件,配置日志服务器
  2. 子对象是什么java_面向对象编程(什么是对象)——java
  3. Wince C++串口编程
  4. C++ string(转)
  5. C语言之加入头文件<stdbool.h>可以使用true和false
  6. MTK MODEM(1)--- MTK平台NV基本功能与操作
  7. Android用canvas画哆啦A梦
  8. 1017 A除以B (20 分)—PAT (Basic Level) Practice (中文)
  9. angularjs指令参数transclude
  10. 怎样解决python dataframe loc,iloc循环处理速度很慢的问题
  11. 从零基础入门Tensorflow2.0 ----九、44.3 keras模型转换成savedmodel
  12. 垂直居中小记 line-height table vertical-align:middle
  13. 关于VMware的Server版卸载须知
  14. [OCR]用tesseract训练自己的字体
  15. 信号与系统实验二 信号运算的MATLAB 实验
  16. euraka 启动报错
  17. rk3399 Android9.0 ota升级失败
  18. e5cz温控表中文说明书_欧姆龙温控器e5cz说明书 OMRON温控表E5EC说明书
  19. 使用Java将阿拉伯数字转换为中文数字(适配小数转换)
  20. 最长公共子序列、最长连续公共子序列、最长递增子序列

热门文章

  1. alanwang[GDOU] 直接插入排序法简单演示
  2. 暴雪在计算机名字,战网怎么改名字 战网改名字简单几步就能修改
  3. 浅析游戏音乐的风格特点—欧美风
  4. [附源码]计算机毕业设计springboot微信点餐系统
  5. 高清多媒体接口(HDMI)静电防护器件ULC0524PA
  6. ARVR技术 | AR, VR, MR和XR?想搞清楚不?
  7. 游戏密码123456问题
  8. Python中随机漫步的实现
  9. 使用 JDBC 进行 MySQL 编程
  10. 微信计步器怎么不计步_微信计步器怎么用?微信计步器在哪里?