中国的居民身份证有18位。其中前17位是信息码,最后1位是校验码。每位信息码可以是0-9的数字,而校验码可以是0-9或X,其中X表示10。
身份证校验码算法:
设18位身份证号序列从左到右为:
引用
a[0], a[1], a[2], a[3], ..., a[16], a[17]
其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10
每一位被赋予一个“权值”,其中,第i位的权值w[i]的计算方法是:
引用
w[i] = 2**(17-i) % 11
其中,i=0,1,2,3,...,17,运算符按Python惯例:x**y表示x的y次方,x%y表示x除以y的余数。
如果一个身份证号是正确的,那么:
引用
(a[0]*w[0] + a[1]*w[1] + a[2]*w[2] + ... + a[16]*w[16] + a[17]*w[17]) % 11 == 1
实际上,校验位a[17]的计算方法,就是巧妙地选择一个值使得上式成立。
根据上述算法,下面是一个验证身份证号正确性的程序。
可以通过命令行输入。第一个命令行参数是身份证号。输出Valid或Invalid。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
USAGE="""\
USAGE: python shenfenzheng.py shenfenzhenghao
"""
chmap = {
'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,
'x':10,'X':10
}
def ch_to_num(ch):
return chmap[ch]
def verify_string(s):
char_list = list(s)
num_list = [ch_to_num(ch) for ch in char_list]
return verify_list(num_list)
def verify_list(l):
sum = 0
for ii,n in enumerate(l):
i = 18-ii
weight = 2**(i-1) % 11
sum = (sum + n*weight) % 11
# print "i=%d,weight=%d,n=%d,sum=%d"%(i,weight,n,sum)
# print sum
return sum==1
if __name__=='__main__':
import sys
if len(sys.argv)!=2:
print USAGE
sys.exit(1)
result = verify_string(sys.argv[1])
if result:
print "Valid"
else:
print "Invalid"
命令行使用举例:
引用
$ python shenfenzheng.py 320105198209275127
Valid
分享到:
相关推荐
根据身份证的校验规则对18位或者15位进行校验,利用python进行编程
设18位身份证号序列从左到右为: 引用 a[0], a[1], a[2], a[3], …, a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,…,17,如果最后一位(校验位)是X,则a[17]=10 每一位被赋予一个“权值”,其中,第i位的权值w[i]...
华西抢号Python脚本华西抢号Python脚本华西抢号Python脚本
用python脚本过滤文本中的关键字并显示,例子
3dSlier是一款医学图像处理的软件...因为最近在学习3DSlicer 的Python脚本编程,但是却因为官网的教程太过于零散而感到苦恼,所以特意仔细的整理了3Dslicer官网上有关Python脚本编程的资料。贡献出来,供大家使用学习。
面向Arcgis的python脚本编程
SecureCRT运行Python脚本测试IoT-WiFi模块-基础1 讲解基础的CRT-Python
本资源为一个完整工程,功能是实现使用C++在执行过程中调用Python脚本,内附VS嵌入Python环境的流程
本文档主要讲述的是Python脚本使用详解;
python脚本python脚本python脚本python脚本python脚本
东信身份证阅读器Python开发包,支持自动读卡实现身份证信息提取
Python脚本,使用Selenium 模拟浏览器操作。 在使用 Chrome 浏览器,用户可以使用鼠标滑动、按键点击以及键盘输入,作为信号输入设备向浏览器传达指令,浏览器收到指令后执行渲染。 这里提到的 Selenium WebDriver ...
面向Arcgis的python脚本编程_李明巨编著
完整的C++调用Python脚本源码,包含参数传递和函数返回值处理等,且解决传递中文参数出现乱码等问题
面向ArcGIS的Python脚本编程
python脚本
15位或18位身份证号码检查,python库,
统信桌面操作系统PXE部署Python脚本 统信桌面操作系统PXE部署Python脚本 统信桌面操作系统PXE部署Python脚本
Python脚本编辑器,初学Python的朋友们可以下载来学习