`
cloverprince
  • 浏览: 130188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

验证身份证号的Python脚本

阅读更多
中国的居民身份证有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
分享到:
评论
1 楼 lseeo 2009-09-09  
非常不错!

相关推荐

    核心基础-根据身份证号判断所属省份、生日及性别-Python源码示例.zip

    在自动化场景下,如批量处理大量用户数据时,Python脚本可以自动解析身份证号码,提高工作效率。 10. **网络爬虫**: 在网络爬虫项目中,可能需要从网页上抓取包含身份证号码的信息,然后进行上述的解析操作,...

    【GIS应用】自定义转换器-使用FME验证身份证号码.zip

    4. 在转换器的属性设置中编写Python或Java脚本,实现身份证号码的验证逻辑。这可能包括检查长度、日期格式、性别代码以及校验码的正确性。 5. 当身份证号码验证通过时,可以继续数据流到下一个转换器或写入目标格式...

    python 开发根据身份证号判断省份+生日等信息demo源码+注解清晰一看就懂.zip

    这个"python 开发根据身份证号判断省份+生日等信息demo源码+注解清晰一看就懂"的压缩包文件很可能是包含了这样一个Python脚本,以及相关的注释,帮助初学者理解代码的工作原理。学习这个示例,你可以了解到如何处理...

    省市地区及6位编码(附身份证号校验程序)

    在提供的标签中,“省市地区及6位编码”强调了对行政区域代码的理解和应用,“身份证号校验”关注的是验证身份证号码的正确性,“根据身份证号获取详细信息”则涉及如何从身份证号码中提取个人信息。 压缩包内的...

    根据身份证号判断所属省份、生日及性别.rar

    在提供的压缩包文件中,很可能包含了一个Python脚本或者一个完整的项目,演示了如何实现上述功能。如果你正在学习Python编程或进行相关的数据处理工作,研究这个文件将非常有助于理解身份证信息的处理方法。记得在...

    Python-Evil基于MLModel的银行卡身份证门牌号光学识别

    在"Python-Evil基于MLModel的银行卡身份证门牌号光学识别"项目中,我们看到的是一个利用机器学习模型(MLModel)实现的OCR系统,专门针对银行卡、身份证和门牌号的文本识别。这个项目可能是为了帮助自动化金融交易...

    基于Python的身份证验证识别和数据处理详解

    在实际应用中,身份证验证识别技术可以与数据处理和机器学习结合,例如在用户注册、实名认证等场景中,通过Python脚本自动化验证身份证号码的合法性,提高业务流程的效率和安全性。同时,对于BERT模型的转换,它允许...

    身份证归属地表.rar

    对于开发者来说,可以利用编程语言如Python的pandas库等工具,编写脚本自动化处理数据。这不仅能提高工作效率,还能够在数据分析、人口统计、信息安全验证等领域发挥巨大作用。 综上所述,“身份证归属地表”为我们...

    身份证识别仪B/s结构软件例子

    在这个例子中,我们聚焦于华视电子的身份证识别仪,它是一个专为读取、处理和验证身份证信息而设计的设备。 B/S结构的核心特点是用户通过浏览器进行交互,服务器负责处理业务逻辑和数据存储。在身份证识别仪的B/S...

    表单验证脚本

    "表单验证脚本"指的是用于检查用户输入数据有效性的代码,确保数据符合预设的规则,例如正确格式的用户名、密码强度、身份证号码以及邮箱地址。这样的脚本可以防止恶意数据注入,保护用户信息安全,并提高用户体验。...

    Python-MaskEditText一个带有mask的简单edittext

    使用这样的库,开发者可以方便地在Python应用中创建用户友好的界面,确保用户按照预设的格式输入数据,例如电话号码、邮箱地址、身份证号等。这有助于减少因格式错误导致的数据问题,提高用户体验,并简化后端数据...

    python 写的orc识别图片

    3. **编写代码实现OCR识别**:以下是一个基本的Python脚本示例,演示如何调用百度OCR接口: ```python import requests import base64 from PIL import Image def ocr(image_path): # 图片转base64编码 ...

    Python题库答案.zip

    Python是一种广泛应用于数据分析、Web开发、自动化脚本和人工智能等领域的高级编程语言。这个名为"Python题库答案.zip"的压缩文件包含了一系列Python编程练习题的解决方案,涵盖了多个主题,如文件操作、字符串验证...

    禁止航天信息平台自动读身份证的程序.zip

    描述中的"脚本"指的是编程代码,可能是JavaScript、Python或其他脚本语言,用于控制身份证读卡器的行为。这个脚本的目的是阻止平台默认的自动读取功能,改为仅在用户手动点击操作后才触发读卡器。这样做的好处在于...

    [工具查询]身份证、手机、IP地址3合一查询系统_whois3.zip

    身份证查询通常涉及验证身份证号码的合法性,以及在合法情况下获取与之相关的公开信息。这种查询可能通过数据库连接或者接口调用来实现,但需要注意的是,由于隐私保护法规,直接获取他人的身份证信息通常是非法的。...

    Python 持卡人管理系统免费源代码.zip

    6. **数据验证**:在输入持卡人信息时,可能会有数据验证的逻辑,确保输入的有效性和一致性,比如检查身份证号码的合法性、电话号码的格式等。 7. **模块化编程**:为了提高代码的可读性和可维护性,系统可能会采用...

    python189某医院体检挂号系统.rar

    数据库设计涉及到表的创建,如患者信息表、医生信息表、预约信息表等,每个表包含相应的字段,如患者姓名、身份证号、预约时间等。数据库操作包括增删改查,通过SQL语句实现,Python可以通过pymysql、sqlite3等库与...

    IDcard.rar

    这个项目可能包含多个Python脚本,如一个用于获取token,另一个用于调用OCR服务并保存结果。每个脚本应遵循良好的编程实践,如注释清晰、函数明确、变量命名规范。 7. **错误处理**: 对于网络请求和API调用,应该...

    python 调用 精伦idr210/200 Demo SDK及接口文档

    通过Python调用精伦IDR210/200的SDK,我们可以实现身份证信息的自动读取、验证和处理,极大地提高了相关业务的效率。对于开发者来说,这是一次将Python的灵活性和便利性应用到硬件设备控制的好机会。

    基于Python的课堂投票系统毕业设计(源码+文档+数据库)

    (1)学生可以在系统中注册个人信息,并使用该信息在系统中参与投票,该系统应该提供正规的用户身份验证机制,如学号或身份证号码等,保证用户身份的准确性和安全性; (2)学生可以在系统中查询个人参与的投票信息...

Global site tag (gtag.js) - Google Analytics