时间:2022-10-02 02:16:31
摘 要:在许多应用系统中,需要输入用户的姓名、身份证号等身份证上的信息,为了保证信息输入的准确性,可以采用身份证阅读器读取第二代居民身份证的信息输入到应用程序中,本文主要探讨在PowerBuilder中,神盾ICR-100M身份证阅读器读取身份证信息的方法。
关键词:PowerBuilder;身份证阅读器;身份证信息;ucs_2编码;GB 2312-80编码
中图分类号:TP311.52
许多应用系统中都涉及到录入身份证信息的问题,如果身份信息录入不正确或不完整,可能会在应用过程中出现很多问题,比如我院学生收费管理系统在前期版本中,未录入学生身份证号,设计时是以学号来区分不同学生。但在其他系统中,比如学生资助的系统中是以身份证号来区分不同学生,为核对学生收费情况和资助情况造成困难,如果按姓名来进行核对,可能出现重名或者姓名录入错误等情况。为了解决这个问题,就需要在学生收费系统中增加身份证号,但如果用人工录入身份证号,一是容易出错,二是效率低下。为了避免录入的身份证信息出现错误和提高工作效率,我们采用了神盾ICR-100M身份证阅读器读取身份证信息。
1 实现原理
1.1 神盾ICR-100M身份证阅读器提供了进行二次开发的SDK开发包,主要包括以下文件:termb.h API函数原型定义。termb.lib API函数的VC开发包。termb.dll API函数的动态联接库。sdtapi.dll termb.dll需要的后台库(和termb.dll一起放在当前目录或系统目录下)。IDCard.dll termb.dll需要的后台库(和termb.dll一起放在当前目录或系统目录下)。
1.2 函数列表
int InitComm(int Port) 初始化串口
int InitCommExt() 初始化串口(扩展)
int CloseComm() 关闭串口
int Authenticate() 卡认证
Read_Content(int Active) 读卡操作,信息文件存储在应用程序当前目录下;
int GetSAMID (char * cSAMID) 获取SAM编号
Int GetPhoto(char * Wlt_File) 获取bmp照片
1.3 函数调用流程
1.4 文字信息读取
读完后,文字信息采用GB 13000的UCS-2进行存储,各项目分配如下:
2 实现方法
int li_cshdk,li_sq,li_dwj,li_fh
long l_file_length,l_ret
string ls_xm,ls_sfzh,ls_long
li_cshdk=InitComm(1001) //初始化端口
if li_cshdk=1 then
messagebox("提示信息","初始化端口成功")
else
messagebox("提示信息","提示信息失败,检查硬件连接是否正确。")
end if
if li_cshdk=1 then //卡认证
li_sq=Authenticate()
if li_sq1 then
messagebox("提示信息","身份证放置不正确,请重新放置身份证。")
end if
else
return
end if
if li_sq=1 then //读卡
li_dwj=Read_Content(1)
if li_dwj1 then
messagebox("提示信息","读卡失败,可能身份证信息已被破坏。")
end if
else
return
end if
CloseComm()//关闭端口
//打开文件
li_fh=FileOpen("wz.txt",StreamMode!,Read!,lockread!)
l_file_length=0
IF li_fh
FileClose(li_fh)
RETURN
END IF
//读文件,将ucs-2编码转换为GB2312-80编码
l_ret=FileRead(li_fh,ls_long)
if l_ret -100 then
li_textlen=WideCharToMultiByte(936,0,ls_long,255,ls_rddata,255,ls_tmp,lb_udc)
// ls_rddata保存转结果
end if
FileClose(li_fh)
3 结束语
在将身份证信息转换为GB2312-80编码后根据需要取出所需信息,本文的程序在PB 9.0下调试通过,应用于我院学生收费系统中。
参考文献:
[1]李勇.PowerBuilder8.0彻底研究[M].北京:中国铁道出版社.
[2]身份证阅读器智能接口版SDK使用手册 V1.30.公安部第一研究所,2007.
作者单位:安顺职业技术学院信息工程系,贵州安顺 561000