居民身份证编号识别

 

居民身份证是国家法定的证明公民个人身份的证件。为了堵塞和制止假居民身份证的流通和使用,在查验和核查居民身份证时可掌握以下几个要点:

 

  一、居民身份证有效期限与持证人年龄、签发日期的关系

 

  居民身份证的有效期限分为10年、20年、长期三种。16周岁至25周岁的,发给有效期为10年的居民身份证;26周岁至45周岁的,发给有效期为20年的居民身份证;46周岁以上的,发给长期有效的居民身份证。证件有效期限从签发之日起计算。如某人1949年9月20日出生,1984年35周岁时申领居民身份证,签发日期为1984年12月31日,他属于26至45周岁这一年龄段,证件有效期限属于20年这一档次,到2004年12月30日有效期满。

 

  查验或检查时,应对照检查证件有效期限与持证人年龄,签发日期三者之间的关系。

 

  二、居民身份证编号识别

 

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

 

  地址码(身份证前六位)表示编码对象第一次申领居民身份证时的常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站http://www.stats.gov.cn/tjbz/index.htm查询到最新的县及县以上的行政编码资料。)

 

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

 

  顺序码(身份证第十五位到十七位)是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“060-069”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生,而且和他同年月日生的男生至少有两个,他们的后四位是001*和003*。分配顺序码中“999、998、997、996”四个顺序号分别为男女性百岁以上老人专用的特定编号。

 

  校验码(身份证最后一位)是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码。

 

  2、从1999年10月1日起,全国实行公民身份证号码制度,居民身份证编号由原15位升至18位。前6位为地址码;第七位至14位为出生日期码,此码由6位数改为8位数,其中年份用4位数表示;第15位至17位为顺序码,取消了顺序码中对百岁老人使用的特定编号;第十八位为校验码,主要是为了校验计算机输入公民身份证号码的前17位数字是否正确,其取值范围是0至10,当值等于10时,用罗马数字符χ表示。

 

  三、身份证第18位(校验码)的计算方法

 

  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。

 

  5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

 

  例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。

 

  首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Python的二代居民身份证号码识别系统可以使用OpenCV和Tesseract OCR库实现。以下是一个简单的实现步骤: 1. 安装OpenCV和Tesseract OCR库。 2. 使用OpenCV读取身份证照片并进行预处理,包括图像增强、二值化、去噪等操作。 ```python import cv2 # 读取身份证照片 img = cv2.imread('id_card.jpg') # 灰度化 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 图像增强 enhanced = cv2.equalizeHist(gray) # 二值化 _, thresh = cv2.threshold(enhanced, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 去噪 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) cleaned = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) ``` 3. 使用OpenCV进行身份证号码区域的定位和提取。 ```python # 身份证号码区域的定位 contours, _ = cv2.findContours(cleaned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rects = [cv2.boundingRect(cnt) for cnt in contours] # 身份证号码区域的提取 id_num_rect = rects[2] id_num_img = cleaned[id_num_rect[1]:id_num_rect[1] + id_num_rect[3], id_num_rect[0]:id_num_rect[0] + id_num_rect[2]] ``` 4. 使用Tesseract OCR库进行身份证号码的识别。 ```python import pytesseract # 身份证号码的识别 id_num = pytesseract.image_to_string(id_num_img, lang='chi_sim') ``` 完整代码如下: ```python import cv2 import pytesseract # 读取身份证照片 img = cv2.imread('id_card.jpg') # 灰度化 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 图像增强 enhanced = cv2.equalizeHist(gray) # 二值化 _, thresh = cv2.threshold(enhanced, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 去噪 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) cleaned = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) # 身份证号码区域的定位 contours, _ = cv2.findContours(cleaned, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) rects = [cv2.boundingRect(cnt) for cnt in contours] # 身份证号码区域的提取 id_num_rect = rects[2] id_num_img = cleaned[id_num_rect[1]:id_num_rect[1] + id_num_rect[3], id_num_rect[0]:id_num_rect[0] + id_num_rect[2]] # 身份证号码的识别 id_num = pytesseract.image_to_string(id_num_img, lang='chi_sim') # 输出识别结果 print('身份证号码:', id_num) # --相关问题--:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值