采用友我科技IC卡讀卡器web插件可以對普通IC卡進行讀和寫操作,根據實際業務需求,可以手動點擊讀寫和在web網頁內自動讀寫.
在web網頁內讀IC卡數據的API有如下:
1.M1卡讀塊,支持將讀取的數據進行DES或者3DES加或者解密后送回
M1ReadBlock(blockIndex, FormatID)
如果DesDir=0則直接讀塊,如果DesDir=1(YW-607)或者DesDir=2(YW-607),同時指定DES的密鑰,則將數據加解密后返回
參數:blockIndex,塊號,絕對地址,從0開始
FormatID,格式,0:16進制字符串返回,1:普通字符串返回。
2.M1卡讀扇區,支持將讀取的數據進行DES或者3DES加或者解密后送回
M1ReadSector(sectorindex, FormatID)
如果DesDir=0則直接讀扇區,如果DesDir=1(YW-607)或者DesDir=2(YW-607),同時指定DES的密鑰,則將數據加解密后返回
參數:blockIndex,塊號,絕對地址,從0開始
FormatID,格式,0:16進制字符串返回,1:普通字符串返回。
讀塊API和讀扇區API都可以讀出卡內數據, 對于1K字節的M1卡, 一個扇區包含4個數據塊.
function ReadBlock()
{
var BlockID;
var Key;
BlockID = 4;
Key ="FFFFFFFFFFFF";
rfidreader.KeyMode=0;
rfidreader.KeyStringMode=0;
rfidreader.KeyString=Key;
rfidreader.Repeat=0;
rfidreader.M1ReadBlock(BlockID, 0);
}
rfidreader.onResult(function(resultdata)
{
switch(resultdata.FunctionID)
{
case 5:
if(resultdata.Result>0)
{
CarNo = resultdata.CardNo;
BlockData = resultdata.strData;
}
else
{
Alert("讀失敗");
}
break;
}
}
);
對于自動讀數據,與單詞讀數據的API接口是一樣的, 不同的是我們通過友我科技IC卡讀卡器web插件的屬性repeat來控制, 當repeat=0表明單次讀取, 當repeat=1表明是自動連續讀取, 當讀取到接過了,通過回調函數返回數據, 如果沒有讀到數據或者錯誤,則不返回任何數據.
function ReadBlock()
{
var BlockID;
var Key;
BlockID = 4;
Key ="FFFFFFFFFFFF";
rfidreader.KeyMode=0;
rfidreader.KeyStringMode=0;
rfidreader.KeyString=Key;
rfidreader.Repeat=1;
rfidreader.M1ReadBlock(BlockID, 0);
}
IC卡web頁面寫數據通過如下api接口實現:
1.M1卡寫塊,支持DES或者3DES加密后寫塊
M1WriteBlock(blockindex,blockdata,FormatID)
如果DesDir=0則直接將數據寫塊,如果DesDir=1(YW-607)或者DesDir=2(YW-607),同時指定DES的密鑰,則將數據加解密后寫塊
參數:blockIndex,塊號,絕對地址,從0開始
blockdata:要寫入的字符串,由于M1卡的每塊為16字節,故blockdata最終轉換的16進制不夠16字節長度,后面將補0x00,如果超過16字節,將去掉多余的字節。
FormatID,格式,0:16進制字符串返回,1:普通字符串返回。
2.M1卡寫扇區,支持DES或者3DES加密后寫扇區
M1WriteSector(blockindex,blockdata,FormatID)
如果DesDir=0則直接將數據寫扇區,如果DesDir=1(YW-607)或者DesDir=2(YW-607),同時指定DES的密鑰,則將數據加解密后寫扇區
參數:blockIndex,塊號,絕對地址,從0開始
blockdata:要寫入的字符串,由于M1卡的扇區有4塊和16塊,可用字節為48字節和240字節
故blockdata最終轉換的16進制不夠字節長度,后面將補0x00,如果超過字節長度,將去掉多余的字節。
FormatID,格式,0:16進制字符串返回,1:普通字符串返回
寫數據的結果也是通過回調函數返回.
以寫數據塊為例:
function WriteBlock()
{
var BlockID;
var Key;
var Data;
BlockID = 4;
Key ="FFFFFFFFFFFF";
Data ="11223344556677889900AABBCCDDEEFF";
rfidreader.KeyMode=0;
rfidreader.KeyStringMode=0;
rfidreader.KeyString=Key;
rfidreader.Repeat=0;
rfidreader.M1WriteBlock(BlockID, Data,0);
}
當寫完成或者寫失敗后, 系統在回調函數中返回結果:
rfidreader.onResult(function(resultdata)
{
switch(resultdata.FunctionID)
{
case 5:
document.getElementById("CardNo").value = resultdata.CardNo;
if(resultdata.Result>0)
{
case 6:
if(resultdata.Result>0)
{
CardNo=resultdata.CardNo;
alert("寫入成功");
}
else
{
alert("寫入失敗,錯誤:")
}
break;
}
}
);
