NDEF格式是NFC論壇定義的一種標準數據交換格式,有了這種數據格式,各種NFC設備就可以直接讀取或者寫入所需要的數據,而不需要事先做約定。友我科技全系列NFC讀寫器都支持NDEF格式。
NDEF格式約定了很多NDEF數據類型uri,用于解析后面的數據,常用的NDEF數據類型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數據格式URI有更多的格式定義,具體可以參考NDEF相關技術文檔。
友我科技IC卡讀卡器WEB插件系統支持NDEF格式的寫入和讀取,支持的卡有M1卡,NTAG等NFC標簽。

有4個接口可以用于NDEF的操作。
NDEF_AddRecord(URI, DataStr)
參數:
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:記錄的字符串值。
回調函數返回結果:
FunctionID=51,
Result:數字,函數執行后的返回值,
UID:自定義的序號,
strData:無
FunctionID=52,
Result:數字,函數執行后的返回值,
UID:自定義的序號,
參數:無, 此函數將列表的所有NDEF記錄寫入到標簽中
FunctionID=53,
Result:數字,函數執行后的返回值,
UID:自定義的序號,
FunctionID=54,
Result:數字,函數執行后的返回值,如果>=0,則result值也作為返回的NDEF記錄的順序號
UID:自定義的序號,
CardNo:所操作的卡的卡號
strData:NDEF記錄的字符串值
valData:NDEF類型URI
一個NFC標簽可以存儲多個NDEF記錄,NDEF記錄數量與自身的數據大小和標簽容量的大小有關。所以我們可以在一個NFC標簽中存儲多個NDEF記錄。
增加一條NDEF記錄到列表,注意此時數據只是在內存中,并沒有寫入到標簽。
function AddToList()
{
var uri;
var Payload;
uri = 1;
Payload ="youwokeji.com.cn";
rfidreader.Repeat=0;
rfidreader.NDEF_AddRecord(uri,Payload);
}
清空所有的NDEF列表,注意是清空內存中的NDEF列表,此處也不操作NFC標簽。
function ClearList()
{
rfidreader.Repeat=0;
rfidreader.NDEF_ClearAllRecords();
}
寫入,將內存中的NDEF數據列表全部寫入到NFC標簽中。
function WriteContent()
{
rfidreader.Repeat=0;
rfidreader.NDEF_Write();
}
function ReadContent()
{
rfidreader.Repeat=0;
rfidreader.NDEF_Read();
}
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;
}
}
);