前段時間有個項目在客戶端web下使用IC卡讀卡器,試了很多種方案都覺得麻煩,最后在網上找了個現成的方案,采用了YW-605HA讀卡器,廠家就不說了,免得說做廣告。開發起來也挺簡單。
他們將IC卡讀卡器接口封裝成ocx文件,分為32位版本和64位版本,自動安裝時自動判斷32位還是64位,這個比較方便,要不然按照版本部署客戶端,那可得累死了。他們的說明如下:
控件文件名稱:yw60x.ocx
32位控件:x86\yw60x.ocx
64位控件:x64\yw60x.ocx
用戶可以根據B/S客戶端的環境配置相應的ocx文件,也可以采用安裝包yw60xocxSetup.exe自動判斷客戶端的環境並且自動選擇適合的ocx進行安裝並注冊
web讀卡器ocx有靜態調用和動態調用兩種方法,這個做web開發的估計都熟悉,直接copy代碼就行了,說明如下:
讀寫器控件yw60x.ocx類名:YW60X.yw60xCtrl.1
讀寫器控件yw60x.ocx的classid:167E1838-7388-4A24-86DE-985B91F0FFBF
在web中可以采用靜態調用和動態調用的方法來初始化控件
動態調用方法:
var obj = new ActiveXObject("YW60X.yw60xCtrl.1");
靜態調用方法:
<object id="yoworfidreader"
classid="clsid:167E1838-7388-4A24-86DE-985B91F0FFBF">
</object>
下面說說在web下我們如何與web讀卡器進行交互,為了輸出相應的參數,他們設計了幾個輸出性質的屬性,如下:
屬性名稱 |
類型 |
含義 |
備注 |
LastResult |
Long |
最后一個函數執行后的返回值,與函數本身的返回值相同 |
判斷函數的返回值與判斷LastResult值是一樣的 |
OutData1 |
Variant |
一個Byte數組,函數執行要輸出的首要內容 |
Byte數組可以在js和vbs里面自由轉換成數組使用,或者使用控件自帶的轉換函數進行轉換 |
OutData1Size |
Long |
OutData1數組的長度,字節數 |
|
OutData2 |
Variant |
一個Byte數組,函數執行要輸出的首要內容 |
|
OutData2Size |
Long |
OutData2數組的長度,字節數 |
|
OutData3 |
Variant |
一個Byte數組,函數執行要輸出的首要內容 |
|
OutData3Size |
Long |
OutData3數組的長度,字節數 |
所有的數據類型都是varaint類型的,與javascript非常兼容,但是在web中處理16進制數組是個麻煩的事,為此他們還設計了很多的類型轉換函數,如下:
從數組獲取所需格式的卡號字符串
函數原形:BSTR ConvertCardNo(VARIANT vCardNo, LONG ConvertIndex)
將數組轉換成16進制的字符串
函數原形:BSTR GetHexStr(VARIANT vData);
將數組轉換成ascii可見字符的字符串
函數原形:BSTR GetAlphaStr(VARIANT vData);
將16進制字符串轉換成VARIANT類的數組
函數原形:VARIANT GetVariantFromHexStr(BSTR sHexStr);
將普通符串轉換成VARIANT類的數組
函數原形:VARIANT GetVariantFromAlphaStr(BSTR sAlphaStr);
看到這了,大家應該知道了。各種數據轉換都是很方便的,下面看看怎么讀卡,直接給一段代碼吧,也是很簡單的
function ReadCard() | |
{ | |
var BlockID; | |
var Key; | |
RequestCard(); | |
BlockID = document.getElementById("BlockIDRead").value; | |
Key =document.ReaderTest.GetVariantFromHexStr(document.getElementById("KeyRead").value); | |
i = document.ReaderTest.YW_KeyAuthorization(1,96,BlockID,Key); | |
if(i<0) | |
{ | |
document.getElementById("DataRead").value ="密鑰認證錯誤"; | |
return; | |
} | |
i = document.ReaderTest.YW_ReadaBlock(1,BlockID,16); | |
if(i<0) | |
{ | |
document.getElementById("DataRead").value ="讀塊錯誤"; | |
return; | |
} | |
document.getElementById("DataRead").value = document.ReaderTest.GetHexStr(document.ReaderTest.OutData1); | |
document.ReaderTest.YW_Buzzer(1,5,5,1); | |
CloseReader(); | |
} | |
很簡單的吧
IC卡讀卡器的web開發也可以采用友我科技RFID讀寫器雲服務技術,將適應更多的web瀏覽器,如IE,Chrome,Firefox,safari,Opera等等