生活随笔
收集整理的這篇文章主要介紹了
记录一下web端调用IC卡读卡器的大致流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結一下web端IC卡讀卡器的調用方法
公司項目中用到了IC卡,需要實現讀寫IC卡,并且與服務端交互。IC卡讀卡器用的是德卡的D8型號,SDK可以在德卡官網找到,下載鏈接:德卡SDK下載。
官方提供了多種語言的SDK,web端調用首先會想到頁面調用OCX的方式。HTML內調用OCX的方法不在贅述,具體可以查看HTML調用OCX。IE瀏覽器在打開響應頁面上需要點“允許阻止的內容”才能成功加載OCX控件,否則無法調用OCX。Chrome及其他瀏覽器相對復雜,請自行百度。
在操作IC卡之前先了解一下IC卡的一些基礎(本文以M1卡為例):
M1卡有16個扇區,即0到15扇區,要讀取扇區中的數據,首先要進行密碼校驗(校驗讀卡設備中的密碼和卡上的密碼);要讀取哪個扇區的數據就要校驗哪個扇區的密碼,dc_read或dc_read_hex方法是用的地址是絕對地址(每個扇區4個地址,16個扇區共64個地址,即0到63),校驗完0扇區的密碼后,能讀取0到3地址上的數據,校驗完1扇區的密碼后,能讀取4到7地址上的數據,以此類推。假設扇區號是 sNo,數據塊號是bNo,則:sNo號扇區的最小區塊號為:4 * sNo,最大區塊號為:4 * sNo + 3。
對卡的操作基本步驟:
初始化 -> 尋卡 -> 校驗密碼 -> 操作(讀、寫、其他操作) -> dc_exit(不執行 exit的話OCX調用會出錯)
function writeCard(){var st
; var lSnr
; var messageText
= document
.getElementById("messageText");st
= rd
.dc_init(100, 115200);if(st
<= 0) {rd
.dc_exit();messageText
.value
= messageText
.value
+= "dc_init error!\r\n\r\n";return;}messageText
.value
= messageText
.value
+= "dc_init ok!\r\n";var snrlen
;st
= rd
.dc_card_n(0,snrlen
);if(st
!= 0){messageText
.value
= messageText
.value
+ "dc_card_n error!"+ "\r\n";rd
.dc_exit();return;}messageText
.value
= messageText
.value
+ "dc_card_n ok!"+ "\r\n";messageText
.value
= messageText
.value
+ rd
.get_bstrRBuffer_asc
+ "\r\n";rd
.put_bstrSBuffer_asc
= "FFFFFFFFFFFF";st
= rd
.dc_authentication_passaddr(0, 11); if (st
!= 0) {messageText
.value
= messageText
.value
+ "dc_authentication_passaddr error!" + "\r\n\r\n";rd
.dc_exit();return;} else {messageText
.value
= messageText
.value
+ "dc_authentication_passaddr ok!" + "\r\n";}messageText
.value
= messageText
.value
+= "dc_card ok!\r\n";messageText
.value
= messageText
.value
+= "卡序列號:" + rd
.get_bstrRBuffer
+ "\r\n"; messageText
.value
= messageText
.value
+= "卡序列號(ASCII):" + rd
.get_bstrRBuffer_asc
+ "\r\n"; rd
.put_bstrSBuffer_asc
= "00000000000000000000000000000007";st
= rd
.dc_write(8); if(st
< 0) {messageText
.value
= messageText
.value
+= "dc_write error!\r\n\r\n";rd
.dc_exit();return;}messageText
.value
= messageText
.value
+= "dc_write ok!\r\n";st
= rd
.dc_beep(50);st
= rd
.dc_exit();if(st
< 0){messageText
+= "dc_exit error!\r\n\r\n";} else {messageText
+= "dc_exit OK!\r\n\r\n";}
}
function readCard(){var st
; var lSnr
; var messageText
= document
.getElementById("messageText");st
= rd
.dc_init(100, 115200);if(st
<= 0) {rd
.dc_exit();messageText
.value
= messageText
.value
+= "dc_init error!\r\n\r\n";return;}messageText
.value
= messageText
.value
+= "dc_init ok!\r\n";st
= rd
.dc_card_n(0, lSnr
);if(st
< 0) {messageText
.value
= messageText
.value
+= "dc_card error!\r\n\r\n";rd
.dc_exit();return;}messageText
.value
= messageText
.value
+= "dc_card ok!\r\n";messageText
.value
= messageText
.value
+= "卡序列號:" + rd
.get_bstrRBuffer
+ "\r\n"; messageText
.value
= messageText
.value
+= "卡序列號(ASCII):" + rd
.get_bstrRBuffer_asc
+ "\r\n"; rd
.put_bstrSBuffer_asc
= "FFFFFFFFFFFF";st
= rd
.dc_authentication_passaddr(0, 11); if(st
< 0) {messageText
.value
= messageText
.value
+= "dc_authentication error!\r\n\r\n";rd
.dc_exit();return;}messageText
.value
= messageText
.value
+= "dc_authentication ok!\r\n";st
= rd
.dc_read(8); if(st
< 0){messageText
.value
= messageText
.value
+= "dc_read error!\r\n\r\n";rd
.dc_exit();return;}messageText
.value
= messageText
.value
+= "卡信息: " + rd
.get_bstrRBuffer_asc
+ "\r\n";st
= rd
.dc_beep(50);st
= rd
.dc_exit();if(st
< 0) {messageText
.value
= messageText
.value
+= "dc_exit error!\r\n\r\n";} else {messageText
.value
= messageText
.value
+= "dc_exit OK!\r\n\r\n";}return;
}
初始化過程可以封裝成一個函數統一處理。要寫入哪些數據、寫到哪個扇區、哪個數據塊由根據業務需求確定,本文僅僅記錄 德卡D8 型號讀卡器的調用過程。
PS:代碼內用到的JS函數可以查找德卡提供的SDK包內的文檔
總結
以上是生活随笔為你收集整理的记录一下web端调用IC卡读卡器的大致流程的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。