彭佩
摘要:該文以VB為編程語言和ACCESS數(shù)據(jù)庫平臺,解決傳統(tǒng)C/S模式下單純利用指紋驗證時,數(shù)據(jù)庫中一對多查詢的低效率驗證身份的問題,同時解決了單純利用IC卡的身份驗證不可靠的問題。
關(guān)鍵詞:指紋;門禁系統(tǒng);IC卡;身份識別
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2013)09-2169-03
指紋IC卡系統(tǒng)是利用指紋的唯一性和不可替代性來保證使用人身份的正確性,以IC卡的數(shù)據(jù)儲存和加密功能作為使用人與使用單位的信息連接橋梁,實現(xiàn)使用人身份的驗證。通過指紋IC卡設(shè)備實現(xiàn)指紋的采集、驗證和讀寫IC卡的功能,根據(jù)結(jié)果發(fā)送信號至單片機控制電插鎖,達到門禁自動化目的。
1 數(shù)據(jù)庫實現(xiàn)
1.1數(shù)據(jù)庫建立
使用Microsoft Access創(chuàng)建數(shù)據(jù)庫,首先是用戶數(shù)據(jù)表,包括用戶編號(UserID),姓名(Name),性別(Sex),備注(fpc),指紋特征(Purv),有效期(vValid)等字段。其次是日志表(log),包括日志流水ID(recordID),用戶編號(UserID),進入時間(userData),是否通行(result)等字段。最后是用戶表的UserID和日志表的userID對應(yīng)。
1.2數(shù)據(jù)庫函數(shù)創(chuàng)建
1)創(chuàng)建Public Function exesql(ByVal sql As String) As ADODB.Recordset函數(shù)
2)利用ADODB建立數(shù)據(jù)連接
3)打開數(shù)據(jù)庫
4)數(shù)據(jù)庫的讀寫操作:可直接調(diào)用exesql(ByVal sql As String)函數(shù)進行操作。
2 指紋數(shù)據(jù)采集實現(xiàn)
指紋的采集主要依靠URU4000指紋采集儀進行,URU4000可以通過BiokeySDK控件進行操作。
2.1指紋儀初始化連接
使用BiokeySD的InitEngine()方法可以初始化指紋儀,此函數(shù)支持同個終端下多個指紋儀同時使用,初始化時必須指定指紋儀的編號進行連接,如: ZKFPEng X1. SensorIndex=0,即可對編號為0的指紋儀進行連接,通過ZKFPEngX1.InitEngine的返回值能判斷指紋儀是否連接成功,其中返回0為成功,1為指紋識別驅(qū)動加載失敗,2為沒有連接指紋儀,3為指定的SensorIndex對應(yīng)的指紋儀不存在。
2.2使用指紋儀進行指紋登記
當(dāng)指紋儀連接成功后可對指紋進行掃描登記。掃描前必須設(shè)置登記指紋的取樣次數(shù),原則上不少于3次。在Biokey的ActiveX控件中提供了EnrollCount屬性來設(shè)置采樣次數(shù),本系統(tǒng)將此屬性設(shè)置為3。另外進行指紋3次采樣時,還必須知道成功的次數(shù),防止由于軟硬件問題導(dǎo)致無限次取樣。同樣Biokey控件返回相應(yīng)的只讀屬性EnrollIndex確定成功的次數(shù)。
2.3 指紋數(shù)據(jù)調(diào)用驗證
采集完畢的指紋系統(tǒng)將信息寫入數(shù)據(jù)庫,為保證數(shù)據(jù)正確性,Biokey提供方法Function VerFinger(byval regTemplate, verTemplate, AdoLearning As Boolean, byval AregFeatureChanged As Boolean) As Boolean,可以比對兩枚指紋的特征模版是否匹配。
3 IC卡數(shù)據(jù)讀寫實現(xiàn)
數(shù)據(jù)的讀寫由RUK-200IC實現(xiàn),使用動態(tài)庫OUR_MIFARE.dll,用VC6.0++開發(fā),編譯成Release實體,適用于WIN2003、XP環(huán)境。
3.1 IC卡讀卡
動態(tài)庫提供了讀卡函數(shù)piccreadex,可一次性讀整個區(qū)的第0塊、第1塊、第2塊共3塊的信息,并返回卡序列號。其原始聲明為:
其中ctrlword讀卡的控制字,ctrlword是一個字節(jié),相當(dāng)于八個位,每個位只有0和1兩種狀態(tài)??啥x以下常量:
讀塊0、塊1、塊2,僅讀指定序列號的卡,需要每次指定密碼:
Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY
serial只需指向一個至少已分配了4個char空間的可寫數(shù)組 unsigned char *指針,serial的下標(biāo)由0開始。keyA1B0為0時以B密碼來認證,為非0時以A密碼來認證。系統(tǒng)中使用A密碼來認證。
*picckey 指向存放卡密碼的數(shù)組(6個char的密碼數(shù)組)。
*piccdata0_2是指向下標(biāo)個數(shù)大于48的字節(jié)數(shù)組,用于存放3個塊的數(shù)據(jù),其中下標(biāo)0~15存放作為讀出塊0的數(shù)據(jù),下標(biāo)16~31存放作為讀出塊1的數(shù)據(jù),下標(biāo)32~47存放作為讀出塊2的數(shù)據(jù)。在執(zhí)行完上面的函數(shù)后,如果返回0,則表示操作成功,可以在VB中使用msgbox提示操作成功。
3.2 IC卡寫卡
動態(tài)庫提供了寫卡函數(shù):Piccwriteex,可一次性寫整個區(qū)的塊信息。其原始聲明如下:
其中ctrlword讀卡的控制字,ctrlword是一個字節(jié),相當(dāng)于八個位,每個位只有0和1兩種狀態(tài)??梢韵榷x以下常量:
與讀塊0、塊1、塊2一樣,當(dāng)寫指定序列號的卡,需要每次指定密碼,成功后休眠卡
Ctrlword = BLOCK0_EN+BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY + NEEDHALT
4門禁控制與網(wǎng)絡(luò)傳輸日志的實現(xiàn)
4.1門禁控制
提供12V電壓電插鎖鎖上,斷電則打開,所以只需一個繼電器便可實現(xiàn)以上功能,而繼電器的控制,則需要51單片機做PC機的下位機,對繼電器進行控制。51單片機提供了RS232轉(zhuǎn)USB接口與PC機對接,在Microsoft Visual Basic中添加MScomm控件可通過USB接口與51單片機進行通訊。通過C語言定義繼電器對應(yīng)單片機管腳sbit RELAY = P1^4;并允許串行接口處于接受狀態(tài),寫一循環(huán)程序,當(dāng)P1^4收到數(shù)據(jù)0時,繼電器打開,否則繼電器合并。
4.2網(wǎng)絡(luò)傳輸日志
VB提供了Winsock控件,通過Protoclo設(shè)置為TCP協(xié)議,用Bind方法綁定一個指定的端口,發(fā)卡端使用listen方法監(jiān)聽檢測連接狀態(tài),在驗證端將IP地址賦值給RemoteHost屬性,當(dāng)發(fā)卡端的ConnectRequest事件觸發(fā)后,發(fā)卡端的IP地址就賦給了這個屬性。
5 結(jié)束語
本文介紹了指紋特征采集實現(xiàn)和IC卡的讀寫實現(xiàn),指紋的采集依靠URU4000指紋采集儀進行,URU4000可以通過BiokeySDK控件進行操作。數(shù)據(jù)卡數(shù)據(jù)的讀寫由RUK-200IC實現(xiàn),動態(tài)庫OUR_MIFARE.dll用VC6.0++開發(fā)。
參考文獻:
[1] 佟雨兵,張其善. USB型指紋采集儀的設(shè)計與實現(xiàn)[J].光電技術(shù)應(yīng)用, 2010(1).
[2] 梁楚樵.基于Miarfe非接觸式IC卡的射頻識別系統(tǒng)研究與實現(xiàn)[D].武漢:武漢理工大學(xué)圖書館,2010.
[3] 蘇兵,左敦穩(wěn),徐松源.存儲器IC卡數(shù)據(jù)傳輸?shù)募用苎芯縖J].哈爾濱理工大學(xué)學(xué)報,2011,8(5).