NDEF格式是NFC論壇定義的一種標(biāo)準(zhǔn)數(shù)據(jù)交換格式,有了這種數(shù)據(jù)格式,各種NFC設(shè)備就可以直接讀取或者寫入所需要的數(shù)據(jù),而不需要事先做約定。友我科技全系列NFC讀寫器都支持NDEF格式。
NDEF格式約定了很多NDEF數(shù)據(jù)類型uri,用于解析后面的數(shù)據(jù),常用的NDEF數(shù)據(jù)類型uri有如下:
0: NDEF Text Type:
1: NDEF URI Type, http://www.:
2: NDEF URI Type, https://www.:
3:NDEF URI Type, http://:
4:NDEF URI Type, https://:
5:NDEF RTD URI Type, tel::
6:NDEF RTD URI Type, mailto::
7:NDEF RTD URI Type: sms::
NDEF數(shù)據(jù)格式URI有更多的格式定義,具體可以參考NDEF相關(guān)技術(shù)文檔。
友我科技IC卡讀卡器WEB插件系統(tǒng)支持NDEF格式的寫入和讀取,支持的卡有M1卡,NTAG等NFC標(biāo)簽。

有4個接口可以用于NDEF的操作。
增加記錄到NDEF列表,此函數(shù)不操作標(biāo)簽
NDEF_AddRecord(URI, DataStr)
參數(shù):
URI: NDEF記錄的類型,常用的類型如下:
0: NDEF Text Type:
1: NDEF URI Type, http://www.:
2: NDEF URI Type, https://www.:
3:NDEF URI Type, http://:
4:NDEF URI Type, https://:
5:NDEF RTD URI Type, tel::
6:NDEF RTD URI Type, mailto::
7:NDEF RTD URI Type: sms::
DataStr:記錄的字符串值。
回調(diào)函數(shù)返回結(jié)果:
FunctionID=51,
Result:數(shù)字,函數(shù)執(zhí)行后的返回值,
UID:自定義的序號,
strData:無
清除所有NDEF記錄,此函數(shù)不操作標(biāo)簽
參數(shù):無
回調(diào)函數(shù)返回結(jié)果:
FunctionID=52,
Result:數(shù)字,函數(shù)執(zhí)行后的返回值,
UID:自定義的序號,
參數(shù):無, 此函數(shù)將列表的所有NDEF記錄寫入到標(biāo)簽中
回調(diào)函數(shù)返回結(jié)果:
FunctionID=53,
Result:數(shù)字,函數(shù)執(zhí)行后的返回值,
UID:自定義的序號,
回調(diào)函數(shù)返回結(jié)果:
FunctionID=54,
Result:數(shù)字,函數(shù)執(zhí)行后的返回值,如果>=0,則result值也作為返回的NDEF記錄的順序號
UID:自定義的序號,
CardNo:所操作的卡的卡號
strData:NDEF記錄的字符串值
valData:NDEF類型URI
一個NFC標(biāo)簽可以存儲多個NDEF記錄,NDEF記錄數(shù)量與自身的數(shù)據(jù)大小和標(biāo)簽容量的大小有關(guān)。所以我們可以在一個NFC標(biāo)簽中存儲多個NDEF記錄。
增加一條NDEF記錄到列表,注意此時數(shù)據(jù)只是在內(nèi)存中,并沒有寫入到標(biāo)簽。
function AddToList()
{
var uri;
var Payload;
uri = 1;
Payload ="youwokeji.com.cn";
rfidreader.Repeat=0;
rfidreader.NDEF_AddRecord(uri,Payload);
}
清空所有的NDEF列表,注意是清空內(nèi)存中的NDEF列表,此處也不操作NFC標(biāo)簽。
function ClearList()
{
rfidreader.Repeat=0;
rfidreader.NDEF_ClearAllRecords();
}
寫入,將內(nèi)存中的NDEF數(shù)據(jù)列表全部寫入到NFC標(biāo)簽中。
function WriteContent()
{
rfidreader.Repeat=0;
rfidreader.NDEF_Write();
}
讀取, 讀取NFC標(biāo)簽中所有的NDEF記錄
function ReadContent()
{
rfidreader.Repeat=0;
rfidreader.NDEF_Read();
}
4個NDEF接口將全部用回調(diào)函數(shù)返回所有的數(shù)據(jù):
rfidreader.onResult(function(resultdata)
{
switch(resultdata.FunctionID)
{
case 51:
if(resultdata.Result>0)
{
alert("增加到NDEF列表成功");
}
break;
case 52:
if(resultdata.Result>0)
{
alert("清空NDEF列表成功");
}
break;
case 53:
if(resultdata.Result>0)
{
CardNo = resultdata.CardNo;
Alert("寫入成功");
}
break
case 54:
if(resultdata.Result>=0)
{
CardNo = resultdata.CardNo;
uri = resultdata.ValData;
ndefdata =resultdata.strData;
break;
}
}
);