身份证开发

身份证

身份证(港澳作身份证,台湾作身分证)是用于证明持有人身份的证件,多数由各国或地区政府发行予公民,它将作为每个人独一无二的公民身份的证明工具。大量新技术的出现允许身份证包含生物识别信息于其中,如照片、面部特征、手掌特征、虹膜扫描识别或指纹识别。其他通常出现在身份证上(或数据库中)的信息包括:全名、父母姓名、住址、职业、民族(在多民族国家中)、血型和凝血因子。

中华人民共和国居民身份证

中国大陆的身份证称为“中华人民共和国居民身份证”。1984年4月6日,中国大陆开始实行居民身份证制度。国务院发布《中华人民共和国居民身份证试行条例》。并且开始颁发第一代居民身份证。第一代居民身份证采用印刷和照相翻拍技术塑封而成,比较容易被伪造。

2003年6月28日,全国人大通过了《中华人民共和国居民身份证法》,此中规定居住在中华人民共和国境内的年满十六周岁的中国公民,应当申请领取居民身份证;未满十六周岁的中国公民,也可以依照本法的规定申请领取居民身份证。

2004年3月29日起中国大陆正式开始为居民换发内藏非接触式IC卡智能芯片的第二代居民身份证,公安部表示,居民身份证更新换代工作将在2008年前全部完成。第二代身份证较第一代身份证做了很多改进。第二代身份证表面采用防伪膜和印刷防伪技术,使用个人彩色照片,而且内置了数字芯片,采用了数字防伪措施,存有个人图像和信息,可以用机器读取。还采用了更大字库,目的在于解决人名地名中的冷僻字问题。《中华人民共和国居民身份证法》第一章总则第五条规定:十六周岁以上公民的居民身份证的有效期为十年、二十年、长期。十六周岁至二十五周岁的,发给有效期十年的居民身份证;二十六周岁至四十五周岁的,发给有效期二十年的居民身份证;四十六周岁以上的,发给长期有效的居民身份证。

未满十六周岁的公民,自愿申请领取居民身份证的,发给有效期五年的居民身份证。

自2012年1月1日起,公民申请领取、换领、补领居民身份证,应当登记指纹信息。如果已持有未登记指纹的旧证,登记后即换发新证。自2013年1月1日起,第一代身份证失效,居民只能使用第二代身份证。

除普通公民外,不具有户籍和居民身份证的现役军人、解放军离休干部等人士,则领取相应的身份证件。

其他身份证

  1. 香港永久性居民智能身份证

    香港身份证由香港特别行政区政府入境事务处签发。香港法例规定凡年满11岁或在香港逗留多于180天人士,皆需于年满11岁后或抵港30天内登记领取身份证。年满11岁的儿童所领取的身份证为儿童身份证,并必须于年满十八岁后更换为成人身份证。现在香港使用的身份证属第七代身份证-智能身份证,取代上一代旧有计算机证,并逐步失效。智能身份证除了可以作一般出入境及身份认证用途外,还可以用作网上电子证书或作为公共图书馆的图书证。每张香港身份证上,均会在姓名一栏下面,印有中文电码,以方便政府或机构作输入姓名之用。

    如果香港永久性居民身份证持有人因需要更换新证或因丢失旧证而要补领,在新证未发出前入境事务处会发出“申请香港永久性居民身份证收据”。此收据具临时身份证的功能,但不能用作出入境香港之用。

  2. 澳门居民身份证

    澳门居民的接触式智能身份证(已停止签发)

    澳门居民身份证由澳门特别行政区政府身份证明局签发,是澳门居民的主要身份证明文件。

  3. 美国身份证

    美国目前还没有真正的全国身份证,这是由于全国范围内都没有这样的联邦机构拥有足够司法权可以发布给所有美国公民身份证。所有立法机构都尝试创建一个这样的机构,但是都失败了,主要原因是来自于自由意志主义者和保守派政治家的强烈反对,他们把这种全国性的身份证看作是极权主义者控制社会的象征,自由派人士也反对,原因在于身份证会限制甚至剥夺了公民权利及政治权利,特别是投票权,因为不少的少数族裔公民并无持有身份证。

     

    然而,由于各种需要身份认证的需要,现时美国的社会安全号码以及驾驶执照的功效已经变成了跟身份证差不多。地方车管所(DMV)也可以为没有驾照的人发State ID来作为证件。而2005年,美国Real ID法案通过后,美国也有关于全国性身份证的争论。

  4. 英国国民身份证

    英联邦在第一次世界大战期间首次发行了强制的身份证,但在1919年时取消。在第二次世界大战时又重新引入身份证,但在战争结束7年后的1952年又废除了,原因是广大公众对Willcock v Muckle案件的愤怒到达了高潮,此案件中Clarence Henry Willcock在违规驾驶时被警察拦下后拒绝出示他的身份证。尽管他输了官司,然而法院一致认同他的观点,即身份证存在是不适当的。

    尽管如此,还是有些国务大臣建议重新引入身份证制度,在各式各样的理由下,2003年,那时的国务大臣大卫·布兰基特(David Blunkett)说英国政府打算引进一种基于生物技术的国内身份证计划,同时使用数据库记录居民的人口,而这将在2013年前强制实行。英国内政部认为这种身份证可打击国际恐怖分子活动,35%的恐怖分子使用虚假的身份旅行。最近以来,政府也声称这种身份证将帮助阻止非法移民,“健康旅行”,骗取津贴以及偷窃身份,并且生物护照也将让英国国民更易到美国旅行。

  5. 古代的身份证

    中国于唐朝时已出现身份证的雏形,朝廷发给官员“鱼符”,以木头或金属精制而成的。其形状像鱼,分左右两片,上凿小孔,以便系佩,上面刻有官员姓名、任职衙门及官居品级等。

    给各层次结构民众使用的身份证于明朝出现,称为“牙牌”,刻有持牌人的姓名、职务、履历以及所在的衙门,不但官员会使用,并开始向中下层次结构发展。某些府邸出入的人不论贵贱都要佩带。传统的纸版配照片式身份证已经很少,现代身份证多是采取高技术的智能卡形式,具备由计算机进行扫描和阅读的能力。

eID公民网络电子身份标识

公安部第一研究所和公安部第三研究所对公民网络可信身份做的努力?

1. 公安部三所已经默默地发展了很多年的[eID公民网络电子身份标识]  2. 近几天新闻大肆报道的公安部第一研究所的二代证上网工程(已在厦门等地应用) 这两个貌似功能是重叠的,同一个大部的两个研究所形成了竞争关系? 众所周知的是身份证相关产业一向由一所把持,而三所的EID已经发展了几年,有着不小的发卡量(工商银行储蓄卡,带有EID标识,但貌似开启的并不多,我想开也没找到地方),而随着NFC设备的市场占有量有较大的提高,技术上NFC手机读取二代证是完全没问题的(包括已有的支持TYPE B的NFC设备可做兼容开发和新生产的全新从底层支持)。

同样关注网络安全的公安部第三研究所(简称“三所”),就推崇适用于互联网的eID网络电子身份。三所所长胡传平在前不久提出,网络实名制的实施带来了公民隐私信息泄露的副作用。“网络实名注册只是用户网络身份由原来的“虚拟身份”变为了“真实身份”,但由于技术和管理上的缺陷,“真名”的背后并不一定是操作者本人。”

  相对于基于身份信息的网络身份识别方式,eID的主要优势在于以下三个方面:一是安全、可靠的网络身份识别技术。二是最大化的个人身份信息保护。三是开放的技术体系可以充分调动社会资源。

  其实不难看出,三所的观点是身份证在网络当中的应用存在一定的缺陷,独立于身份证之外的eID更加能够完成公民在互联网中的身份验证作用。如果一所进一步完善身份证在互联网的信息安全问题,对eID来说,就影响了其应用范围。一所与三所的竞争在互联网中爆发了,而且有愈演愈烈的趋势。

通用二代身份证阅读器接口

 

由于每个厂家生产二代证读写器都不一样,都有自己的开发接口,这样就导致了购买了不同厂家的读写器后,要重新进行二次开发,很浪费资源,但是读写器的芯片却是通用的,都是公安部提供的,也就意味着有通用的库。该通用二代身份证delphi开发源码适用于任何厂家的任何读写器,而且自持C# Delphi等多种开发语言。

该类接口具有如下特点:     1、通用于目前市场上各个机具厂商的二代证读(写)机具。(想想,为不同厂商开发不同的接口确实令人头疼的,且由于接口不兼容,容易被客户骂死!)     2、自动适应串口、USB口的各种机具     3、能读文字信息,但是,要想正确读照片,必须需要机具厂商的授权文件Termb.Lic,且授权文件必须放在C盘根目录下。(我总不能不照顾机具厂商的利益吧)     4、除了上面第三条之外,您甚至不用安装机具的驱动程序,接上二代证机具即可使用。

 

    为了简化用户操作,很多用户都购买了二代身份证阅读器用于在预约挂号、入院登记、自助打印等需要使命登记的业务场合进行身份证信息快速录入,同时二代身份证阅读器也为使用单位避免法律风险、提高管理水平提供了一个现代化的工具。

         为了满足用户需求,我们系统中也提供了相应的接口以读取二代身份证阅读器读到的信息,目前我们已经支持多种型号的二代身份证阅读器设备,如深圳华视CVR-100U、深圳华视CVR-100D、神思-V1、新中新KDQ-116D、国腾GTICR100、华旭HX-FDX9。

         但是最近半年,很多二代身份证阅读器接口部件升级导致我们之前开发的设备接口不能正常使用,如提示“软件未授权”等错误。需要我们重新开发新接口。针对此问题,我在网上了解到一些于此相关的信息。早些年是有公_安部发放标准《身份证阅读器智能接口版SDK 使用手册》及SDK相关文件。主要包括

termb.h       API函数原型定义

termb.lib      API函数的VC开发包

termb.dll      API函数的动态联接库

sdtapi.dll    termb.dll需要的后台库(和termb.dll一起放在当前目录或系统目录下)

WltRS.dll   termb.dll需要的后台库(和termb.dll一起放在当前目录或系统目录下)

公_安部提供的Termb.dll动态联接库 提供了七个方法以满足系统应用中的使用需求,SDK很少升级,而且每次升级都没有大的变化(我们目前使用的是V1.2.0,我看到最新的是v1.3.0),我们之前开发的六个设备接口都是基于V1.2.0的SDK开发的,使用正常。但是最近有三种型号的设备因产品升级出现故障,不能正常使用,我们通过分析检查,发现写设备公司提供的SDK发生了较大的变化,termb.dll提供的方法与公_安部提供的termb.dll提供的方法出现差异,需要我们重新编写接口,为了避免重复编写接口,我们试图找到一种实现通用接口的方法,通过网上查找资料,已近对这三种设备的提供的SDK DLL文件进行分析,我们发现 WltRS.dll几年来未发生变化,主要是用于相片解码,sdtapi.dll发生变化较小,基本与公_安部提供的一致,发生变化较大的是termb.dll,termb.dll主要是对sdtapi.dll和WltRS.dll文件的方法进行封装。因此,我们可以考虑直接调用 sdtapi.dll 和 WltRS.dll 的方法进行解析。常用方法如下

1.        SDT_OpenPort               打开端口

2.         SDT_ClosePort             关闭端口

3.        SDT_GetCOMBaud             获取波特率

4.        SDT_SetCOMBaud             设置波特率

5.         SDT_ResetSAM                        

6.         SDT_SetMaxRFByte                          

7.         SDT_GetSAMStatus                           

8.         SDT_GetSAMID                        

9.         SDT_GetSAMIDToStr              

10.     SDT_StartFindIDCard        开始寻卡

11.     SDT_SelectIDCard           选卡

12.     SDT_ReadMngInfo                  

13.     SDT_ReadBaseMsg            读取身份证基本信息

14.    SDT_ReadBaseMsgToFile       读取身份证基本信息到文件

15.     GetBmp                      获取照片

使用以上15个方法即可实现大多数设备通用的接口程序,有个别特殊的除外(如华视连sdtapi.dll 都已修改,这种情况只能开发新接口)。

那么,如何根据医生15个方法实现通用接口呢?

二代身份证阅读器接口的实现流程一般为:

打开端口->找卡->选卡->读卡(一般保存到文件)->解析->关闭端口

知道流程后就可以开始编码,此处不便贴出所有代码,只对需要特别注意的地方进行解释。

首先,第一步打开端口需要特别注意,串口和USB接口的身份证阅读器设备比较常见,而一般计算机最多包含16个USB接口和4个串口,打开端口时应该检查所有端口。

16个USB端口用  1001~1016 表示;4个串口用1~4表示;

我们可以循环对这20个端口进行检查

For iPort = 1001 To 1016

        intReturn = SDT_OpenPort(iPort)

        If intReturn = 1 Then

            blnUsbPort = True

            Exit For

        End If

    Next

  

    If Not blnUsbPort Then

        For iPort = 1 To 4

            intReturn = SDT_OpenPort(iPort)

            If intReturn = 1 Then

                blnUsbPort = False

                Exit For

            End If

        Next

    End If

  

    If intReturn <> 1 Then

        MsgBox "端口打开失败,请检测相应的端口或者重新连接读卡器!", vbInformation

    End If

 

第二步第三步,找卡、选卡这两部比较简单,只需要传入正确参数即可。相关方法SDT_StartFindIDCard和SDT_SelectIDCard。

第四步读卡,读卡分为两步,读取并解析基本信息和读取照片。读取基本信息即可以读入内存,也可以读入文件,然后在解析文件。读取照片可直接保存为BMP文件,但是,要想正确读取照片文件,必须需要机具厂商的授权文件termb.lic,并将该授权文件放在C盘根目录下。涉及方法有SDT_ReadBaseMsg、SDT_ReadBaseMsgToFile和GetBmp。

第五步关闭端口是不必像打开端口是循环调用,只需要调用一次即可,因为端口号已确定。

         通过这五步即可实现普遍通用的二代身份证阅读器接口,目前测试过三种设备,华旭HX-FDX9、新中新、国腾GTICR100,该接口都能正确读取身份证的信息,但其通用性还需要新的设备继续测试验证,深圳华视那样的特例目前只发现一个,不知道会不会接二连三的出现

参见

  1. 不同机具的通用的第二代居民身份证读写

  2. 身份证读卡器标准接口使用