中国的居民身份证有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
分享到:
相关推荐
在自动化场景下,如批量处理大量用户数据时,Python脚本可以自动解析身份证号码,提高工作效率。 10. **网络爬虫**: 在网络爬虫项目中,可能需要从网页上抓取包含身份证号码的信息,然后进行上述的解析操作,...
4. 在转换器的属性设置中编写Python或Java脚本,实现身份证号码的验证逻辑。这可能包括检查长度、日期格式、性别代码以及校验码的正确性。 5. 当身份证号码验证通过时,可以继续数据流到下一个转换器或写入目标格式...
这个"python 开发根据身份证号判断省份+生日等信息demo源码+注解清晰一看就懂"的压缩包文件很可能是包含了这样一个Python脚本,以及相关的注释,帮助初学者理解代码的工作原理。学习这个示例,你可以了解到如何处理...
在提供的标签中,“省市地区及6位编码”强调了对行政区域代码的理解和应用,“身份证号校验”关注的是验证身份证号码的正确性,“根据身份证号获取详细信息”则涉及如何从身份证号码中提取个人信息。 压缩包内的...
在提供的压缩包文件中,很可能包含了一个Python脚本或者一个完整的项目,演示了如何实现上述功能。如果你正在学习Python编程或进行相关的数据处理工作,研究这个文件将非常有助于理解身份证信息的处理方法。记得在...
在"Python-Evil基于MLModel的银行卡身份证门牌号光学识别"项目中,我们看到的是一个利用机器学习模型(MLModel)实现的OCR系统,专门针对银行卡、身份证和门牌号的文本识别。这个项目可能是为了帮助自动化金融交易...
在实际应用中,身份证验证识别技术可以与数据处理和机器学习结合,例如在用户注册、实名认证等场景中,通过Python脚本自动化验证身份证号码的合法性,提高业务流程的效率和安全性。同时,对于BERT模型的转换,它允许...
对于开发者来说,可以利用编程语言如Python的pandas库等工具,编写脚本自动化处理数据。这不仅能提高工作效率,还能够在数据分析、人口统计、信息安全验证等领域发挥巨大作用。 综上所述,“身份证归属地表”为我们...
在这个例子中,我们聚焦于华视电子的身份证识别仪,它是一个专为读取、处理和验证身份证信息而设计的设备。 B/S结构的核心特点是用户通过浏览器进行交互,服务器负责处理业务逻辑和数据存储。在身份证识别仪的B/S...
"表单验证脚本"指的是用于检查用户输入数据有效性的代码,确保数据符合预设的规则,例如正确格式的用户名、密码强度、身份证号码以及邮箱地址。这样的脚本可以防止恶意数据注入,保护用户信息安全,并提高用户体验。...
使用这样的库,开发者可以方便地在Python应用中创建用户友好的界面,确保用户按照预设的格式输入数据,例如电话号码、邮箱地址、身份证号等。这有助于减少因格式错误导致的数据问题,提高用户体验,并简化后端数据...
3. **编写代码实现OCR识别**:以下是一个基本的Python脚本示例,演示如何调用百度OCR接口: ```python import requests import base64 from PIL import Image def ocr(image_path): # 图片转base64编码 ...
Python是一种广泛应用于数据分析、Web开发、自动化脚本和人工智能等领域的高级编程语言。这个名为"Python题库答案.zip"的压缩文件包含了一系列Python编程练习题的解决方案,涵盖了多个主题,如文件操作、字符串验证...
描述中的"脚本"指的是编程代码,可能是JavaScript、Python或其他脚本语言,用于控制身份证读卡器的行为。这个脚本的目的是阻止平台默认的自动读取功能,改为仅在用户手动点击操作后才触发读卡器。这样做的好处在于...
身份证查询通常涉及验证身份证号码的合法性,以及在合法情况下获取与之相关的公开信息。这种查询可能通过数据库连接或者接口调用来实现,但需要注意的是,由于隐私保护法规,直接获取他人的身份证信息通常是非法的。...
6. **数据验证**:在输入持卡人信息时,可能会有数据验证的逻辑,确保输入的有效性和一致性,比如检查身份证号码的合法性、电话号码的格式等。 7. **模块化编程**:为了提高代码的可读性和可维护性,系统可能会采用...
数据库设计涉及到表的创建,如患者信息表、医生信息表、预约信息表等,每个表包含相应的字段,如患者姓名、身份证号、预约时间等。数据库操作包括增删改查,通过SQL语句实现,Python可以通过pymysql、sqlite3等库与...
这个项目可能包含多个Python脚本,如一个用于获取token,另一个用于调用OCR服务并保存结果。每个脚本应遵循良好的编程实践,如注释清晰、函数明确、变量命名规范。 7. **错误处理**: 对于网络请求和API调用,应该...
通过Python调用精伦IDR210/200的SDK,我们可以实现身份证信息的自动读取、验证和处理,极大地提高了相关业务的效率。对于开发者来说,这是一次将Python的灵活性和便利性应用到硬件设备控制的好机会。
(1)学生可以在系统中注册个人信息,并使用该信息在系统中参与投票,该系统应该提供正规的用户身份验证机制,如学号或身份证号码等,保证用户身份的准确性和安全性; (2)学生可以在系统中查询个人参与的投票信息...