Delphi轻松读写NDEF文本、智能海报、应用控制等NFC标签

这篇具有很好参考价值的文章主要介绍了Delphi轻松读写NDEF文本、智能海报、应用控制等NFC标签。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        NDEF 全称 NFC data exchange format 即 nfc 数据交换格式,是一种标准化的数据格式,可用于在任何兼容的NFC设备与另一个NFC设备或标签之间交换信息。数据格式由NDEF消息和NDEF记录组成。

       NDEF信息可以写到不同类型的NFC芯片中,如NFC_Forum_Type2类的Ntag2x、FM11NTx系列芯片、NFC_Forum_Type4标签、NFC_Forum_Type5类的15693系列芯片、MifareClassic系列芯片等,不同类型的芯片NDEF信息的存储方式也略有不同,这就大大增加了NDEF信息写入、读取的难度。

        广州荣士电子将各种不同类型的NDEF记录类型的写入、读取方式都函数化,开发人员不需再了解复杂的NDEF记录格式,只需调用相应的函数就可快速写入正确的NDEF信息。

Delphi轻松读写NDEF文本、智能海报、应用控制等NFC标签,IC读写器,18002295132,QQ:954486673,NDEF标签,NFC,Delph_NDEF,Delphi智能海报,Delphi_NFC

Delphi轻松读写NDEF文本、智能海报、应用控制等NFC标签,IC读写器,18002295132,QQ:954486673,NDEF标签,NFC,Delph_NDEF,Delphi智能海报,Delphi_NFC

 本说明使用的发卡器:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com)文章来源地址https://www.toymoban.com/news/detail-608874.html

写入NDEF纯文本 
var
  status:byte;
  languagecodestr:string;
  languagecodestrlen:integer;
  textstr:string;
  textstrlen:integer;
begin
     languagecodestr:='en';    //语言编码,英文为en,中文为zh
     languagecodestrlen:=length(languagecodestr);   //语言编码长度
     textstr:=trim(Memo1.Text);         //NDEF文本
     textstrlen:= length(textstr);      //文本长度

     tagbuf_forumtype4_clear();     //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_addtext(languagecodestr, languagecodestrlen, textstr, textstrlen);  //生成NDEF纯文本标签数据缓冲
     if status=0 then
         WriteTag(1)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF纯文本数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
 写入NDEF智能海报
var
  status:byte;
  languagecodestr:string;
  languagecodestrlen:integer;
  titlestr:string;
  titlestrlen:integer;
  uriheaderindex:integer;
  uristr:string;
  uristrlen:integer;
begin
     languagecodestr:='en';    //语言编码,英文为en,中文为zh
     languagecodestrlen:=length(languagecodestr);   //语言编码长度
     titlestr:=trim(Edit1.Text);           //标题
     titlestrlen:= length(titlestr);       //标题长度
     uriheaderindex:=ComboBox1.ItemIndex ; //前缀
     uristr:=trim(Edit2.Text);             //URI
     uristrlen:= length(uristr);           //URI长度

     tagbuf_forumtype4_clear();            //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_adduri(languagecodestr, languagecodestrlen, titlestr, titlestrlen, uriheaderindex, uristr, uristrlen);  //生成NDEF URI标签数据缓冲
     if status=0 then
         WriteTag(2)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF URI数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
写NDEF地图坐标
var
  status:byte;
  languagecodestr:string;
  languagecodestrlen:integer;
  titlestr:string;
  titlestrlen:integer;
  uriheaderindex:integer;
  uristr:string;
  uristrlen:integer;
begin
     languagecodestr:='en';    //语言编码,英文为en,中文为zh
     languagecodestrlen:=length(languagecodestr);   //语言编码长度
     titlestr:=trim(Edit3.Text);           //标题,地点名称
     titlestrlen:= length(titlestr);       //标题长度
     uriheaderindex:=0 ;                   //前缀,地图坐标取0
     uristr:='geo:'+trim(Edit4.Text)+','+trim(Edit5.Text);    //URI,纬度,经度
     uristrlen:= length(uristr);           //URI长度

     tagbuf_forumtype4_clear();            //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_adduri(languagecodestr, languagecodestrlen, titlestr, titlestrlen, uriheaderindex, uristr, uristrlen);  //生成NDEF地图坐标标签数据缓冲
     if status=0 then
         WriteTag(3)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF地图坐标数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
写NDEF电子名片
var
  status:byte;
  infostr:string;
  infostrlen:integer;
begin
     infostr:='BEGIN:VCARD'+chr(10);                           //名片信息
     infostr:=infostr+'VERSION:3.0'+chr(10);
     infostr:=infostr+'FN:'+trim(Edit7.Text)+chr(10);          //姓名
     infostr:=infostr+'TEL:'+trim(Edit8.Text)+chr(10);         //电话
     infostr:=infostr+'ORG:'+trim(Edit9.Text)+chr(10);         //单位名称
     infostr:=infostr+'ADR:'+trim(Edit12.Text)+chr(10);        //地址
     infostr:=infostr+'EMAIL:'+trim(Edit10.Text)+chr(10);      //邮箱
     infostr:=infostr+'URL:'+trim(Edit11.Text)+chr(10);        //官网
     infostr:=infostr+'END:VCARD' +chr(10);

     infostrlen:=length(infostr);     //名片信息长度

     tagbuf_forumtype4_clear();       //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_addbusinesscard(infostr, infostrlen);  //生成NDEF电子名片标签数据缓冲
     if status=0 then
         WriteTag(5)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF电子名片数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
写NDEF控制标签WIFI连接
var
  status:byte;
  ssidstr:string;
  ssidstrlen:integer;
  keystr:string;
  keystrlen:integer;
  authtype:integer;
  crypttype:integer;
begin
     ssidstr:=trim(Edit13.Text);           //WIFI热点名称
     ssidstrlen:=length(ssidstr);          //热点名称长度
     authtype:=ComboBox2.ItemIndex ;       //认证方式
     crypttype:=ComboBox3.ItemIndex ;      //加密算法
     keystr:=trim(Edit14.Text);            //密码
     keystrlen:= length(keystr);           //密码长度

     tagbuf_forumtype4_clear();            //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_addwifi(ssidstr, ssidstrlen, authtype, crypttype, keystr, keystrlen);  //生成NDEF控制标签WIFI连接数据缓冲
     if status=0 then
         WriteTag(6)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF控制标签WIFI连接数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
写NDEF控制标签蓝牙连接 
var
  status:byte;
  blenamestr:string;
  blenamestrlen:integer;
  macstr:string;
  macbuf:array[0..5] of byte;
  AStrings: TStringList;
  i:integer;
begin
     blenamestr:=trim(Edit15.Text);           //蓝牙设备名称
     blenamestrlen:=length(blenamestr);       //蓝牙设备名称长度
     macstr:=trim(Edit16.Text);               //蓝牙设备MAC

     try
         AStrings := TStringList.Create;
         ExtractStrings([':'],[],Pchar(macstr),AStrings);
         if AStrings.Count =6 then
         begin
             for i:=0 to 5 do  macbuf[i]:=strtoint('$'+AStrings.Strings[i]);
         end
         else
         begin
              Application.MessageBox(PAnsiChar('MAC地址输入错误!'), '提示', MB_OK+MB_ICONSTOP);
              Edit16.SetFocus ;
              exit;
         end;
     except
         Application.MessageBox(PAnsiChar('MAC地址输入错误!'), '提示', MB_OK+MB_ICONSTOP);
         Edit16.SetFocus ;
         exit;
     end;

     tagbuf_forumtype4_clear();            //清空NDEF数据缓冲
     tagbuf_clear();
     status := tagbuf_addbluetooth(blenamestr, blenamestrlen, @macbuf);  //生成NDEF控制标签蓝牙连接数据缓冲
     if status=0 then
         WriteTag(7)  //将NDEF缓冲数据写入各种不同类型的NFC标签
     else
         Application.MessageBox('生成NDEF控制标签蓝牙连接数据缓冲失败!', '提示', MB_OK+MB_ICONINFORMATION);
将NDEF信息写入不同类型的NFC标签
var
  cardtyep:integer;
  status:byte;
  afi:byte;
  myctrlword:byte;
  mypiccserial:array[0..7] of byte;
  mypiccseriallen:array[0..0] of byte;
  dispinf:string;
  cardno:string;
  i:integer;
begin
     case NdefType of
          1:
            dispinf:=',写NDEF纯文本标签';
          2:
            dispinf:=',写NDEF URI标签';
          3:
            dispinf:=',写NDEF地图坐标标签';
          4:
            dispinf:=',写NDEF呼叫电话标签';
          5:
            dispinf:=',写NDEF电子名片标签';
          6:
            dispinf:=',写NDEF控制标签WIFI连接';
          7:
            dispinf:=',写NDEF控制标签蓝牙连接';
          8:
            dispinf:=',写NDEF控制标签启动应用';
          9:
            dispinf:=',写NDEF数据类型标签';
          44:
            dispinf:=',清除标签内NDEF信息';
     end;

     cardtyep:=checkcardtype;//判断发卡器上标签类型

     case  cardtyep of
          1:
          begin //写forumtype2 Ntag2标签
              if CheckBox1.Checked then myctrlword:=$10 else myctrlword:=0;
              status:= forumtype2_write_ndeftag(myctrlword, @mypiccserial, @oldpicckey);
              if  status=0 then
              begin
                  if (CheckBox1.Checked and CheckBox2.Checked=false) or (CheckBox1.Checked=false and CheckBox2.Checked) then  NtagKeyEn;   //开启或关闭密码保护

                  pcdbeep(38);
                  cardno:='ForumType2Uid:' ;
                  for i:=0 to 6 do cardno:=cardno+inttohex(mypiccserial[i],2);
                  Application.MessageBox(PAnsiChar(cardno+dispinf+'成功!'), '提示', MB_OK+MB_ICONINFORMATION);
              end
              else
                  disperrinf(status);
          end;
          2:
          begin  //写forumtype5 15693标签
              myctrlword:=0;
              afi:=0;
              status := forumtype5_write_ndeftag(myctrlword, afi, @mypiccserial);
              if  status=0 then
              begin
                  //if CheckBox2.Checked then status := iso15693lockblock(34, 1, @mypiccserial);    //警告:forumtype5、15693卡锁定块数据后只能读取不可再修改,为防止卡片锁死,仅在确定需要才开启此段代码。

                  pcdbeep(38);
                  cardno:='ForumType5Uid:' ;
                  for i:=0 to 7 do cardno:=cardno+inttohex(mypiccserial[7-i],2);
                  Application.MessageBox(PAnsiChar(cardno+dispinf+'成功!'), '提示', MB_OK+MB_ICONINFORMATION);
              end
              else
                  disperrinf(status);
          end;
          3:
          begin  //写MifareClassic标签
              if NdefType=44 then  //清空MifareClassic内NDEF信息并恢复到出厂状态
              begin
                  if CheckBox1.Checked then myctrlword:=$80+$40+$10+$2 else myctrlword:=$80+$10+$2;
                  status:= piccclear_ndeftag(myctrlword, @mypiccserial, @oldpicckey);
              end
              else
              begin     //写NDEF信息 到 MifareClassic标签内
                  if CheckBox1.Checked then myctrlword:=$80+$40+$10 else myctrlword:=$80+$10;
                  if CheckBox2.Checked then myctrlword:=myctrlword+$04;
                  status:= piccwrite_ndeftag(myctrlword, @mypiccserial, @oldpicckey,@newpicckey);
              end;
              if  status=0 then
              begin
                  pcdbeep(38);
                  cardno:='MifareClassUid:' ;
                  for i:=0 to 3 do cardno:=cardno+inttohex(mypiccserial[i],2);
                  Application.MessageBox(PAnsiChar(cardno+dispinf+'成功!'), '提示', MB_OK+MB_ICONINFORMATION);
              end
              else
                  disperrinf(status);
          end;
          4:
          begin  //写forumtype4 标签
              if CheckBox1.Checked then myctrlword:=$40 else myctrlword:=0;
              status := forumtype4_write_ndeftag(myctrlword, @mypiccserial, @mypiccseriallen, @newpicckey);
              if  status=0 then
              begin
                  pcdbeep(38);
                  cardno:='ForumType4Uid:' ;
                  for i:=0 to mypiccseriallen[0]-1 do cardno:=cardno+inttohex(mypiccserial[i],2);
                  Application.MessageBox(PAnsiChar(cardno+dispinf+'成功!'), '提示', MB_OK+MB_ICONINFORMATION);
              end
              else
                  disperrinf(status);
          end;
     end;
 读取不同类型芯片内的NDEF信息
var
  status: Byte;
  afi: Byte;
  cardtype: Integer;
  myctrlword: Byte;
  revstrlen: Integer;
  recordnumber: Integer;
  mypiccserial: array[0..7] of Byte;
  mypiccseriallen:array[0..0] of Byte;
  mypiccdata: array[0..2048] of Byte;
  cardno: string;
  ndefstr:string;
  ndefchr: PChar;
  ndefchr1:Pchar;
  i: Integer;
begin
     status:=255;
     memo2.Text :='';
     tagbuf_forumtype4_clear();            //清空NDEF数据缓冲
     tagbuf_clear();
     
     cardtype:=checkcardtype;//判断发卡器上标签类型

     case  cardtype of
          1:      //读forumtype2 Ntag2标签
          begin
              if CheckBox1.Checked then myctrlword:=$10 else myctrlword:=0;
              status := forumtype2_read_ndeftag(myctrlword, @mypiccserial, @oldpicckey);
              if status=0 then
              begin
                  cardno:='ForumType2Uid:' ;
                  for i:=0 to 6 do cardno:=cardno+inttohex(mypiccserial[i],2);
              end;
          end;
          2:     //读forumtype5 15693标签
          begin
              myctrlword:=0;
              afi:=0;
              status := forumtype5_read_ndeftag(myctrlword, afi, @mypiccserial);
              if status=0 then
              begin
                  cardno:='ForumType5Uid:' ;
                  for i:=0 to 7 do cardno:=cardno+inttohex(mypiccserial[7-i],2);
              end;
          end;
          3:      //读MifareClassic标签
          begin
              if CheckBox1.Checked then myctrlword:=$80+$40+$10 else myctrlword:=$80+$10;
              status := piccread_ndeftag(myctrlword, @mypiccserial, @oldpicckey);
              if status=0 then
              begin
                  cardno:='MifareClassUid:' ;
                  for i:=0 to 3 do cardno:=cardno+inttohex(mypiccserial[i],2);
              end;
          end;
          4:      //读forumtype4 标签
          begin
              if CheckBox1.Checked then myctrlword:=$40 else myctrlword:=0;
              status := forumtype4_read_ndeftag(myctrlword, @mypiccserial,@mypiccseriallen, @oldpicckey);
              if status=0 then
              begin
                  cardno:='ForumType4Uid:' ;
                  for i:=0 to mypiccseriallen[0]-1 do cardno:=cardno+inttohex(mypiccserial[i],2);
              end;
          end;
     end;

     if status=0 then
     begin
          pcdbeep(38);
          tagbuf_read(@mypiccdata, @revstrlen, @recordnumber);
          ndefstr:=cardno+chr(13)+chr(10);
          for i:=0 to revstrlen-1 do  ndefstr:=ndefstr+chr(mypiccdata[i]);
          Memo2.Text := ndefstr;
     end;

到了这里,关于Delphi轻松读写NDEF文本、智能海报、应用控制等NFC标签的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenAI-ChatGPT最新官方接口《语音智能转文本》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(六)(附源码)

    Speech to text 语音转文本 Learn how to turn audio into text 了解如何将音频转换为文本 ChatGPT 是集人工智能和自然语言处理技术于一身的大型语言模型。它能够通过文字、语音或者图像等多种方式与用户进行交互。其中,通过语音转文字功能,ChatGPT 能够将用户说出的话语,立即转化为

    2023年04月21日
    浏览(57)
  • 【元壤教育AI提示工程】Midjourney神器助力,设计小白3分钟轻松打造炫酷海报!

    前言 关注「元壤教育」公众号,系统学习更多AIGC课程。 看完这篇实操教程,设计师该领盒饭了,哈哈,开个玩笑,各位老板看着办。 本教程针对完全没有设计基础的老板们,手把手教你3分钟利用Midjourney轻松打造炫酷海报。 这里有两种方法,不过本教程我们先讲解第二种。

    2024年02月12日
    浏览(42)
  • AIGC文本生成智能应用(ChatGPT)提示工程师技巧

    我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下AIGC文本生成智能提示工程师技巧。 当你在使用类似于ChatGPT这样的AIGC文本生成智能应用时,有没有想过,你所问的问题中的每一个词语对AIGC文本生成智能应用给你的回答的好与不好都有着很重要的联系。 我们在使

    2024年02月13日
    浏览(45)
  • Delphi 百度智能云 OCR API 调用控件

    百度智能云提供了OCR识别功能,其识别种类非常丰富,包括:卡证文字识别、通用场景文字识别、交通场景文字识别、财务票据文字识别...等等。无论是移动端,还是PC端,通过调用OCR服务,可以方便的识别成需要的文字。 在百度智能云官方提供的调用文档中,并没有提供

    2024年02月12日
    浏览(39)
  • 开启想象翅膀:轻松实现文本生成模型的创作应用,支持LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用

    TextGen 实现了多种文本生成模型,包括:LLaMA、ChatGLM、UDA、GPT2、Seq2Seq、BART、T5、SongNet等模型,开箱即用。 [2023/06/15] v1.0.0版本: 新增ChatGLM/LLaMA/Bloom模型的多轮对话微调训练,并发布医疗问诊LoRA模型shibing624/ziya-llama-13b-medical-lora。详见Release-v1.0.0 [2023/06/02] v0.2.7版本: 新增ChatG

    2024年02月13日
    浏览(41)
  • AI在智能家居控制中心中的应用:提升控制效率

    作者:禅与计算机程序设计艺术 智能家居控制中心(IaC)是一个集成化的智能控制系统,它能够从各种设备采集数据、分析处理并实时监控用户需求,并据此优化控制策略,为用户提供更加舒适、安全、健康的家居环境。作为一个高度自动化的系统,IaC需要快速响应各种变化

    2024年02月07日
    浏览(55)
  • 【嵌入式Qt开发入门】如何使用Qt进行文本读写——QFile读写文本

            在很多时候我们需要读写文本文件进行读写,比如写个 Mp3 音乐播放器需要读 Mp3 歌词里的文本,比如修改了一个 txt 文件后保存,就需要对这个文件进行读写操作。本文介绍简单的文本文件读写,内容精简,让大家了解文本读写的基本操作。         QFile 类提

    2024年02月12日
    浏览(45)
  • 机器人感知与控制关键技术及其智能制造应用

    源自:自动化学报       作者:王耀南 江一鸣 姜娇 张辉 谭浩然 彭伟星 吴昊天  曾凯 智能机器人在服务国家重大需求, 引领国民经济发展和保障国防安全中起到重要作用, 被誉为“制造业皇冠顶端的明珠”. 随着新一轮工业革命的到来, 世界主要工业国家都开始加快机器人

    2024年02月09日
    浏览(68)
  • 智能机井灌溉控制器批量应用于新疆农业灌溉计量监测项目

    近日,新疆某县级水利部门为进一步提升水资源取用水的监管能力,完善水资源实时监控、计划用水和节约用水管理目标,对该地农业灌溉用水计量设施进行升级改造,将700口井安装 智能机井灌溉控制器 ,有效实现水量监测,完善了灌区灌溉定额及灌溉水利用效率。     该

    2024年02月11日
    浏览(41)
  • 轻松并发,玩转StampedLock——Java 新一代读写锁

      在并发编程中,读写锁是一种常用的技术来保证数据的安全性和高效性。Java 中的 ReadWriteLock 可以让多个线程同时读取共享资源而不会出现竞争,只有在写操作时才需要独占资源。但是,如果我们想要在读操作时也可以同时写入,就需要使用 Java 8 引入的新的读写锁:St

    2024年02月03日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包