日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记录一下web端调用IC卡读卡器的大致流程

發布時間:2024/3/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记录一下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; //本用于取序列號,但在javascript只是當成dc_card函數的一個臨時變量var messageText = document.getElementById("messageText");st = rd.dc_init(100, 115200);if(st <= 0) //返回值小于等于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+ "\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"; //序列號為rd.get_bstrRBuffer,一般有不可顯示字符出現messageText.value = messageText.value += "卡序列號(ASCII):" + rd.get_bstrRBuffer_asc + "\r\n"; //序列號十六進制ascll碼字符串表示為rd.get_bstrRBuffer_asc//向卡中寫入數據,一次必須寫一個塊//第一個參數為塊地址//在調用dc_write必須前先設置屬性rd.put_bstrSBuffer或rd.put_bstrSBuffer_ascrd.put_bstrSBuffer_asc = "00000000000000000000000000000007";st = rd.dc_write(8); //區塊地址號根據需求確定if(st < 0) //返回值小于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; //本用于取序列號,但在javascript只是當成dc_card函數的一個臨時變量var messageText = document.getElementById("messageText");st = rd.dc_init(100, 115200);if(st <= 0) //返回值小于等于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";//尋卡,能返回在工作區域內某張卡的序列號//第一個參數一般設置為0,表示IDLE模式,一次只對一張卡操作//第二個參數在javascript只是當成dc_card函數的一個臨時變量,僅在vbscript中調用后能正確返回序列號st = rd.dc_card_n(0, lSnr);if(st < 0) //返回值小于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"; //序列號為rd.get_bstrRBuffer,一般有不可顯示字符出現messageText.value = messageText.value += "卡序列號(ASCII):" + rd.get_bstrRBuffer_asc + "\r\n"; //序列號十六進制ascll碼字符串表示為rd.get_bstrRBuffer_asc//核對密碼函數//第一個參數為密碼驗證模式//第二個參數為扇區號rd.put_bstrSBuffer_asc = "FFFFFFFFFFFF";//st = rd.dc_authentication_passaddr(0, 7);st = rd.dc_authentication_passaddr(0, 11); //區塊地址號根據需求確定if(st < 0) //返回值小于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(4);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卡读卡器的大致流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产99免费 | 天天干天天爽天天操 | 在线免费观看国产精品 | 国产一区二区在线播放视频 | 在线激情视频 | 成人在线不卡 | 久久9999久久免费精品国产 | 二区在线视频 | jizz中国少妇高潮出水 | 99自拍视频在线观看 | 日日噜噜噜噜久久久精品毛片 | 91精品大片| 国产婷婷一区二区三区 | 亚洲欧美韩日 | 秋霞一区| 麻豆蜜臀 | 亚洲二级片| 久久久久九九九 | 国产麻豆精品一区二区 | 丁香婷婷综合激情五月色 | 天堂√在线| 中文在线a√在线 | 日本熟妇浓毛 | 老司机精品视频在线 | 久久手机看片 | 亚洲欧美一区二区三区在线观看 | 欧美成人精品一区二区三区在线看 | 国产夜夜操 | 精品人妻人伦一区二区有限公司 | 黄色工厂这里只有精品 | 老公吃小头头视频免费观看 | 日本一区高清 | 久草视频在线免费看 | 欧美黑人一级 | 波多野结衣视频一区 | 男人激烈吮乳吃奶爽文 | 精品成人免费视频 | 黄色av免费在线看 | av黄色小说| 午夜日韩精品 | 国产婷婷色综合av蜜臀av | 97超碰免费观看 | 国产又粗又黄又爽视频 | 久青草免费视频 | 亚洲国产精品视频一区 | 永久免费av | 美女被变态侵犯 | 狠狠爱夜夜爱 | 午夜影院体验区 | 免费观看亚洲 | 韩国三级hd中文字幕的背景音乐 | 日韩综合在线 | 日本三级一区二区三区 | 日韩爱爱视频 | 午夜视频在线免费 | 欧美成人怡红院 | 久久久久人妻精品一区二区三区 | 国产成人亚洲精品无码h在线 | 久久精品综合网 | 2020亚洲男人天堂 | 伊人加勒比| 色哟哟入口国产精品 | 亚洲国产欧美视频 | 日毛片| 久久亚洲精品国产精品黑人v | 超碰人人国产 | 国产91在线播放 | 果冻av在线 | 国产91视频播放 | 久久精品无码专区免费 | 健身教练巨大粗爽gay视频 | 嫩草视频免费观看 | 国产精品麻豆欧美日韩ww | 欧美怡红院一区二区三区 | 男男受被啪到高潮自述 | 日韩av有码| 成人欧美精品 | 欧美激情一二三区 | 欧美a一级片 | 欧日韩不卡在线视频 | 伊人网综合网 | 久久久久xxxx | 啪啪网站免费观看 | 中文字幕第66页 | 国产精品一色哟哟哟 | 国产精品99久久久久 | 色乱码一区二区三区网站 | www.麻豆av | 免费日本特黄 | 少妇一晚三次一区二区三区 | 久久综合资源 | 男同志毛片特黄毛片 | 免费成人黄色网址 | 偷拍综合网 | 性欧美成人播放77777 | 91久久久国产精品 | 久久久人体 | 亚洲成人少妇 | 日本特级黄色 |