摘 要:在許多應(yīng)用系統(tǒng)中,需要輸入用戶的姓名、身份證號(hào)等身份證上的信息,為了保證信息輸入的準(zhǔn)確性,可以采用身份證閱讀器讀取第二代居民身份證的信息輸入到應(yīng)用程序中,本文主要探討在PowerBuilder中,神盾ICR-100M身份證閱讀器讀取身份證信息的方法。
關(guān)鍵詞:PowerBuilder;身份證閱讀器;身份證信息;ucs_2編碼;GB 2312-80編碼
中圖分類號(hào):TP311.52
許多應(yīng)用系統(tǒng)中都涉及到錄入身份證信息的問題,如果身份信息錄入不正確或不完整,可能會(huì)在應(yīng)用過程中出現(xiàn)很多問題,比如我院學(xué)生收費(fèi)管理系統(tǒng)在前期版本中,未錄入學(xué)生身份證號(hào),設(shè)計(jì)時(shí)是以學(xué)號(hào)來區(qū)分不同學(xué)生。但在其他系統(tǒng)中,比如學(xué)生資助的系統(tǒng)中是以身份證號(hào)來區(qū)分不同學(xué)生,為核對(duì)學(xué)生收費(fèi)情況和資助情況造成困難,如果按姓名來進(jìn)行核對(duì),可能出現(xiàn)重名或者姓名錄入錯(cuò)誤等情況。為了解決這個(gè)問題,就需要在學(xué)生收費(fèi)系統(tǒng)中增加身份證號(hào),但如果用人工錄入身份證號(hào),一是容易出錯(cuò),二是效率低下。為了避免錄入的身份證信息出現(xiàn)錯(cuò)誤和提高工作效率,我們采用了神盾ICR-100M身份證閱讀器讀取身份證信息。
1 實(shí)現(xiàn)原理
1.1 神盾ICR-100M身份證閱讀器提供了進(jìn)行二次開發(fā)的SDK開發(fā)包,主要包括以下文件:termb.h API函數(shù)原型定義。termb.lib API函數(shù)的VC開發(fā)包。termb.dll API函數(shù)的動(dòng)態(tài)聯(lián)接庫。sdtapi.dll termb.dll需要的后臺(tái)庫(和termb.dll一起放在當(dāng)前目錄或系統(tǒng)目錄下)。IDCard.dll termb.dll需要的后臺(tái)庫(和termb.dll一起放在當(dāng)前目錄或系統(tǒng)目錄下)。
1.2 函數(shù)列表
int InitComm(int Port) 初始化串口
int InitCommExt() 初始化串口(擴(kuò)展)
int CloseComm() 關(guān)閉串口
int Authenticate() 卡認(rèn)證
Read_Content(int Active) 讀卡操作,信息文件存儲(chǔ)在應(yīng)用程序當(dāng)前目錄下;
int GetSAMID (char * cSAMID) 獲取SAM編號(hào)
Int GetPhoto(char * Wlt_File) 獲取bmp照片
1.3 函數(shù)調(diào)用流程
1.4 文字信息讀取
讀完后,文字信息采用GB 13000的UCS-2進(jìn)行存儲(chǔ),各項(xiàng)目分配如下:
2 實(shí)現(xiàn)方法
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 //卡認(rèn)證
li_sq=Authenticate()
if li_sq<>1 then
messagebox(\"提示信息\",\"身份證放置不正確,請(qǐng)重新放置身份證。\")
end if
else
return
end if
if li_sq=1 then //讀卡
li_dwj=Read_Content(1)
if li_dwj<>1 then
messagebox(\"提示信息\",\"讀卡失敗,可能身份證信息已被破壞。\")
end if
else
return
end if
CloseComm()//關(guān)閉端口
//打開文件
li_fh=FileOpen(\"wz.txt\",StreamMode!,Read!,lockread!)
l_file_length=0
IF li_fh <0 THEN
FileClose(li_fh)
RETURN
END IF
//讀文件,將ucs-2編碼轉(zhuǎn)換為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保存轉(zhuǎn)結(jié)果
end if
FileClose(li_fh)
3 結(jié)束語
在將身份證信息轉(zhuǎn)換為GB2312-80編碼后根據(jù)需要取出所需信息,本文的程序在PB 9.0下調(diào)試通過,應(yīng)用于我院學(xué)生收費(fèi)系統(tǒng)中。
參考文獻(xiàn):
[1]李勇.PowerBuilder8.0徹底研究[M].北京:中國鐵道出版社.
[2]身份證閱讀器智能接口版SDK使用手冊(cè) V1.30.公安部第一研究所,2007.
作者單位:安順職業(yè)技術(shù)學(xué)院信息工程系,貴州安順 561000