关于身份证号的那些事

标签: 数据资源 网站数据 python 身份证 | 发表时间:2012-11-04 18:35 | 作者:标点符
出处:http://www.biaodianfu.com

居民身份证号码,根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

一、身份证号码的组成

1、地址码(身份证号码前六位)

表示编码对象常住户口所在县(市、镇、区)的行政区划代码。1-2位省、自治区、直辖市代码; 3-4位地级市、盟、自治州代码; 5-6位县、县级市、区代码。

关于 行政区划代码具体的对应冠以,可以从国家统计局网站上直接获取。

具体地址为: http://www.stats.gov.cn/tjbz/xzqhdm/

2、生日期码(身份证号码第七位到第十四位)

表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

3、顺序码(身份证号码第十五位到十七位)

地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

4、校验码(身份证号码最后一位)

是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替。

二、身份证校验码计算方法

  1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
  2. 将这17位数字和系数相乘的结果相加。
  3. 用加出来和除以11,看余数是多少?
  4. 余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。通过上面得知如果余数是2,身份证的最后一位号码就是罗马数字x。如果余数是10,就会在身份证的第18位数字上出现的是2。

三、身份证校验Python版

#-*- coding:UTF-8 -*-
import re
from datetime import datetime

__all__ = ["GeneratIdentityChecker"]

class ExceptionIdentityChecker(Exception):
    pass

def GeneratIdentityChecker(country = "China"):
    cls = globals().get(country+"IdentityChecker")
    if cls:
        return cls()
    else:
        raise ExceptionIdentityChecker(country+" identity's checker not found")

class ChinaIdentityChecker():
    def __init__(self):
        self.anWi = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
        self.cnAreaPart = 6
        self.cnMod = 11
        self.csYearPre = "19"
        self.csCheckCode = "10X98765432"
        self.cnMinArea = 150000
        self.cnMaxArea = 700000

    def check(self,code,**options):
        code = code.upper()
        if len(code) not in (15,18) or not re.match(r"^\d{15}$|^\d{17}[\dxX]$", code):
            return False

        area = int(code[0:self.cnAreaPart])

        if not (self.cnMinArea <= area <= self.cnMaxArea):
            return False

        birthday = self.csYearPre+code[6:12] if len(code) == 15 else code[6:14]
        try:
            datetime.strptime(birthday, "%Y%M%d")
        except:
            return False

        if len(code) == 18:
            wi = self.anWi
            total = 0
            for i in range(16,-1,-1):
                total += int(code[i])*wi[i]
            if not self.csCheckCode[total%self.cnMod] == code[17]:
                return False

        for i in options:
            try:
                checker = getattr(self,"_check_"+i)
            except:
                return False

            if not checker(code,options[i]):
                return False

        return True

    def _check_sex(self,code,sex):
        sex_flag = code[14] if len(code) == 15 else code[16]
        sex = sex.upper()
        if sex == "M":
            return int(sex_flag)%2 == 1
        elif sex == "F":
            return int(sex_flag)%2 == 0
        else:
            return False

if __name__ == "__main__":
    gic = GeneratIdentityChecker()
    print gic.check("34052419800101001X")

Related posts:

  1. Goo.gl的使用方法
  2. PHP版记录蜘蛛爬行历史
  3. 使用python来抓取新浪的IP数据

相关 [身份证] 推荐:

关于身份证号的那些事

- - 标点符
居民身份证号码,根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成. 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. 1、地址码(身份证号码前六位). 表示编码对象常住户口所在县(市、镇、区)的行政区划代码.

失效身份证系统应与现身份证信息系统完全打通

- - 付亮的竞争情报应用
黄明指出,建立失效居民身份证信息系统,是公安部坚持问题导向、回应社会关切,推出的又一项服务广大群众、确保居民身份证使用安全的改革措施,将为社会用证部门和单位落实居民身份证核查责任提供重要的辅助手段. 该信息系统 具备数据实时更新和动态维护功能,通过社会各用证部门和单位联网核查,实现所有丢失被盗居民身份证即时失效,无法在社会上继续使用.

二代身份证被指有四处语病

- richweller - Solidot
3秒 写道 "第二代身份证至少存在四个值得商榷的语病:1.“二代证”印有照片的一面有“公民身份”字样,而另一面则印有“居民身份证”五个大字. 那么,持证人的身份到底是“公民”还是“居民”. 须知,这是完全不同的两个法律概念. 2.“公民身份号码”表达不妥,因为“身份”不具有数字性,只有“公民身份证”才能被编成一个个号码.

天朝第二代身份证号码的验证机制

- shakhand - I am LAZY bones ?
今天,在盛大某网站注册的时候,身份证必填,但我又不想填真实身份证号码,于是随便编了串自认为合法的身份证号码,但是却马上被提示号码错误,由于响应速度极快,可以肯定不是联机校验正确性的,那也就是说第二代身份证除了大家都知道的几位表示生日和性别的规则以外,还有另外的自我校验规则. 于是翻开页面源码查看,发现这段js没有被压缩,所以规则也很好懂.

复印黑人身份证请用高档复印机

- lzhi - Lzhi&#39;s Views
鸡、牛、草,哪两个是一类. 怎样巧妙地回答让你难堪的问题. 为什么中国穷人的路越走越窄. 本文网址:http://www.lzhi.org/views/700024. 欢迎加入500人超级QQ群:108869281,交流最新好文章.

中国考虑在身份证中登记指纹信息

- 我要发芽 - Solidot
全国人大常委会24日审议居民身份证法修正案草案. 草案规定:公民申请领取、换领、补领居民身份证,应当登记指纹信息. 公安部副部长杨焕宁表示,在居民身份证中加入指纹信息,国家机关以及金融、电信、交通、教育、医疗等单位可以通过机读快速、准确地进行人证同一性认定,有助于维护国家安全和社会稳定,有利于提高工作效率,有效防范冒用他人居民身份证以及伪造、变更居民身份证等违法犯罪行为的发生,并在金融机构清理问题账户、落实存款实名制等方面发挥重要作用.

第一代身份证明年起停用

- applelen - Solidot
lot 写道 "据联合早报网报道, 中国居民身份证法草案规定, 一代身份证自2013年1月1日起停止使用.本次草案由十一届全国人大常委会第二十三次会议第一次全体会议审议, 草案规定, 在居民身份证登记中要加入指纹信息, 已有二代身份证的在领取、换领、补领居民身份证时应当登记指纹信息. 部分城市对尚未换领第二代身份证的市民有便利民措施.".

身份证法通过 居民办证将登记指纹

- Woooon - 网易头条新闻
中新网北京10月29日电  十一届全国人大常委会第二十三次会议29日上午经表决,通过了关于修改居民身份证法的决定. 修改后的居民身份证法规定:公民申请领取、换领、补领居民身份证,应当登记指纹信息. 中国公安部副部长杨焕宁此前在向会议作说明时表示,在居民身份证中加入指纹信息,国家机关以及金融、电信、交通、.

小心倾家荡产 身份证复印一定要加上这些

- - 博客园_新闻
近日,网上传言称办理信用卡、基金、手机、申请书业务,只要附身份证复印件的,或填写和身份证有类似作用的表格,为保障自己的权益,一定要写签注,否则就会被不法分子挪作他用. 这则传言被迅速转发并引发网友热议,不少网友表示自己长了知识,再使用身份证复印件时会多个心眼. 身份证复印件如果保护不善会有什么后果.

中国移动科普:手机里的身份证照片应果断删除

- - cnBeta.COM 全文
一个手机号、一台能上网的智能手机,仅靠这两样,在当下的社会生活中就能办成各种各样的事情,包括一些敏感的、数额不小的金融活动. 1月4日,中国移动10086官方微博发布科普一张图, 提醒手机里存有身份证等个人隐私照片的朋友,果断删除,以免留下后患. 官方引述的例子是,李某打开存有赵先生身份证照片的手机相册后,利用这个不起眼的疏漏修改了失主的支付宝账号,刷走余额2000余元,甚至连花呗、借呗也没放过进行透支购物,最后还把手机折现千元,给对方造成了不小的损失.