当前位置:   article > 正文

C#读写ISO15693协议ICODE2标签源码_回答72 iso15693协议,如果tagit,icode2

回答72 iso15693协议,如果tagit,icode2

发卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.15.a99e24daLllJ0M&id=562249362177icon-default.png?t=M276https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.15.a99e24daLllJ0M&id=562249362177

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Runtime.InteropServices;  //调用动态库一定要加入这个引用
  11. //using System.Text;//一定要加入这个
  12. namespace iso15693reader
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public const byte NEEDSERIAL = 0x08;//仅对指定UID号的卡操作
  17.         public const byte NEEDHALT = 0x20;//读卡或写卡后顺便休眠该卡,休眠后,卡必须拿离开感应区,再放回感应区,才能进行第二次操作。
  18.         //外部函数声明:让设备发出声响
  19.         [DllImport("OUR_MIFARE.dll", EntryPoint = "pcdbeep", CallingConvention = CallingConvention.StdCall)]
  20.         static extern byte pcdbeep(UInt32 xms);//xms单位为毫秒 
  21.         //读取设备编号,可做为软件加密狗用,也可以根据此编号在公司网站上查询保修期限
  22.         [DllImport("OUR_MIFARE.dll", EntryPoint = "pcdgetdevicenumber", CallingConvention = CallingConvention.StdCall)]
  23.         static extern byte pcdgetdevicenumber(byte[] devicenumber);//devicenumber用于返回编号 
  24.         //------------------------------------------------------------------------------------------------------------------------------------------------------
  25.         //轻松读卡
  26.         [DllImport("OUR_MIFARE.dll", EntryPoint = "iso15693readex", CallingConvention = CallingConvention.StdCall)]
  27.         static extern byte iso15693readex(byte ctrlword, byte afi, byte startblock,byte blocknum,byte[] uid, byte[] revbuf);
  28.         //参数说明
  29.         //ctrlword:控制字,用常量NEEDSERIAL,NEEDHALT赋值,这两常量说明请看声明后的注释
  30.         //afi:应用领域识别号,只能操作相同识别号的卡,一般卡出厂时AFI为0
  31.         //startblock:起始块号
  32.         //blocknum:本次操作的块数量
  33.         //uid:卡序列号,15693卡序列号为8个字节
  34.         //revbuf:用于返回卡块内信息,最大49个字节,其中头一个字节存放返回的字节数,紧跟着的为卡块内信息.
  35.         //------------------------------------------------------------------------------------------------------------------------------------------------------
  36.         //轻松写卡
  37.         [DllImport("OUR_MIFARE.dll", EntryPoint = "iso15693writeex", CallingConvention = CallingConvention.StdCall)]
  38.         static extern byte iso15693writeex(byte ctrlword, byte afi, byte startblock, byte blocknum, byte[] uid, byte[] writebuf);
  39.         //参数说明
  40.         //ctrlword:控制字,用常量NEEDSERIAL,NEEDHALT赋值,这两常量说明请看声明后的注释
  41.         //afi:应用领域识别号,只能操作相同识别号的卡,一般卡出厂时AFI为0
  42.         //startblock:起始块号
  43.         //blocknum:本次操作的块数量
  44.         //uid:卡序列号,15693卡序列号为8个字节
  45.         //writebuf:用于指定写入的卡块内信息,最大49个字节,其中头一个字节存放本次要写入的字节数,紧跟着的为卡块内信息.
  46.         //寻一张卡
  47.         [DllImport("OUR_MIFARE.dll", EntryPoint = "iso15693inventory", CallingConvention = CallingConvention.StdCall)]
  48.         static extern byte iso15693inventory(byte flags, byte afi, byte masklen,byte[] maskuid, byte[] revuid);
  49.         //参数说明
  50.         //ctrlword:控制字,用常量NEEDSERIAL,NEEDHALT赋值,这两常量说明请看声明后的注释
  51.         //afi:应用领域识别号,只能操作相同识别号的卡,一般卡出厂时AFI为0
  52.         //masklen:掩码bit位数,一般置为0
  53.         //maskuid:卡序列号掩码,为8个字节,指的是卡号和maskuid中的masklen位数值相同的卡片才能寻得到
  54.         //revuid:返回DSFID及卡序列号,第0字节为DSFID,第1到8为卡序列号,共为8个字节
  55.         public Form1()
  56.         {
  57.             InitializeComponent();
  58.         }
  59.         private void button1_Click(object sender, EventArgs e)
  60.         {//轻松读卡
  61.             byte status;//存放返回值
  62.             byte ctrlword;
  63.             byte afi;
  64.             byte startblock;
  65.             byte blocknum;
  66.             byte[] uidbuf = new byte[8];
  67.             byte[] revbuf = new byte[200];//卡数据缓冲
  68.             int i;
  69.             string str;
  70.             //控制字指定,控制字的含义请查看本公司网站提供的动态库说明
  71.             ctrlword = 0;
  72.             afi = System.Convert.ToByte(textBox1.Text,16);//以十六进制方式转成数值
  73.             startblock = System.Convert.ToByte(textBox2.Text);
  74.             blocknum = System.Convert.ToByte(textBox3.Text);
  75.             for (i = 0; i < 8; i++)
  76.             {
  77.                 uidbuf[i] = Convert.ToByte(textBox4.Text.Substring(i * 2, 2),16);
  78.             }
  79.             status = iso15693readex(ctrlword, afi, startblock, blocknum, uidbuf, revbuf);
  80.             switch (status)
  81.             {
  82.                 case 0:
  83.                     str = "";
  84.                     for (i = 0; i < 8; i++)
  85.                     {
  86.                         str += uidbuf[i].ToString("X02");
  87.                     }
  88.                     textBox4.Text = str;
  89.                     str = "";
  90.                     for (i = 0; i < revbuf[0]; i++)
  91.                     {
  92.                         str += revbuf[i+1].ToString("X02");
  93.                     }
  94.                     richTextBox1.Text = str;
  95.                     pcdbeep(50);
  96.                     break;
  97.                 //......
  98.                 case 8:
  99.                     MessageBox.Show("请将卡放在感应区");
  100.                     break;
  101.                 default:
  102.                     MessageBox.Show("返回码(对应的说明请看例子中的注释):" + status);
  103.                     break;
  104.             }
  105.         }
  106.         private void button2_Click(object sender, EventArgs e)
  107.         {
  108.             pcdbeep(50);
  109.         }
  110.         private void button4_Click(object sender, EventArgs e)
  111.         {
  112.             byte[] devno = new byte[4];
  113.             if (pcdgetdevicenumber(devno) == 0)
  114.             {
  115.                 MessageBox.Show(System.Convert.ToString(devno[0]) + "-" + System.Convert.ToString(devno[1]) + "-" + System.Convert.ToString(devno[2]) + "-" + System.Convert.ToString(devno[3]));
  116.                 //ShowMessage(IntToStr(devno[0]) + "-" + IntToStr(devno[1]) + "-" + IntToStr(devno[2]) + "-" + IntToStr(devno[3]));
  117.             }
  118.         }
  119.         private void button3_Click(object sender, EventArgs e)
  120.         {//轻松写卡
  121.             byte status;//存放返回值
  122.             byte ctrlword;
  123.             byte afi;
  124.             byte startblock;
  125.             byte blocknum;
  126.             byte[] uidbuf = new byte[8];
  127.             byte[] writebuf = new byte[200];//卡数据缓冲
  128.             int i;
  129.             string str;
  130.             //控制字指定,控制字的含义请查看本公司网站提供的动态库说明
  131.             ctrlword = 0;
  132.             afi = System.Convert.ToByte(textBox1.Text, 16);//以十六进制方式转成数值
  133.             startblock = System.Convert.ToByte(textBox2.Text);
  134.             blocknum = System.Convert.ToByte(textBox3.Text);
  135.             for (i = 0; i < 8; i++)
  136.             {
  137.                 uidbuf[i] = Convert.ToByte(textBox4.Text.Substring(i * 2, 2), 16);
  138.             }
  139.             writebuf[0] = (byte)(blocknum * 4);
  140.             for (i = 0; i < 48; i++)
  141.             {
  142.                 writebuf[i+1] = (byte)i;
  143.             }
  144.             status = iso15693writeex(ctrlword, afi, startblock, blocknum, uidbuf, writebuf);
  145.             switch (status)
  146.             {
  147.                 case 0:
  148.                     str = "";
  149.                     for (i = 0; i < 8; i++)
  150.                     {
  151.                         str += uidbuf[i].ToString("X02");
  152.                     }
  153.                     textBox4.Text = str;
  154.                     pcdbeep(50);
  155.                     break;
  156.                 //......
  157.                 case 8:
  158.                     MessageBox.Show("请将卡放在感应区");
  159.                     break;
  160.                 default:
  161.                     MessageBox.Show("返回码(对应的说明请看例子中的注释):" + status);
  162.                     break;
  163.             }
  164.         }
  165.         private void button5_Click(object sender, EventArgs e)
  166.         {
  167.             byte status;//存放返回值
  168.             byte afi;
  169.             byte[] maskuid = new byte[8];
  170.             byte[] revuid = new byte[9];//卡数据缓冲
  171.             int i;
  172.             string str;
  173.             //控制字指定,控制字的含义请查看本公司网站提供的动态库说明
  174.             afi = System.Convert.ToByte(textBox1.Text,16);//以十六进制方式转成数值
  175.             status = iso15693inventory(0x36, afi, 0, maskuid, revuid);
  176.             switch (status)
  177.             {
  178.                 case 0:
  179.                     str = "";
  180.                     for (i = 1; i < 9; i++)
  181.                     {
  182.                         str += revuid[i].ToString("X02");
  183.                     }
  184.                     textBox4.Text = str;
  185.     
  186.                     pcdbeep(50);
  187.                     break;
  188.                 //......
  189.                 case 8:
  190.                     MessageBox.Show("请将卡放在感应区");
  191.                     break;
  192.                 default:
  193.                     MessageBox.Show("返回码(对应的说明请看例子中的注释):" + status);
  194.                     break;
  195.             }
  196.         }
  197.         private void Form1_Load(object sender, EventArgs e)
  198.         {
  199.         }
  200.     }
  201. }
  202. /*
  203. '返回解释
  204. '#define ERR_REQUEST 8'寻卡错误
  205. '#define ERR_READSERIAL 9'读序列吗错误
  206. '#define ERR_SELECTCARD 10'选卡错误
  207. '#define ERR_LOADKEY 11'装载密码错误
  208. '#define ERR_AUTHKEY 12'密码认证错误
  209. '#define ERR_READ 13'读卡错误
  210. '#define ERR_WRITE 14'写卡错误
  211. '#define ERR_NONEDLL 21'没有动态库
  212. '#define ERR_DRIVERORDLL 22'动态库或驱动程序异常
  213. '#define ERR_DRIVERNULL 23'驱动程序错误或尚未安装
  214. '#define ERR_TIMEOUT 24'操作超时,一般是动态库没有反映
  215. '#define ERR_TXSIZE 25'发送字数不够
  216. '#define ERR_TXCRC 26'发送的CRC错
  217. '#define ERR_RXSIZE 27'接收的字数不够
  218. '#define ERR_RXCRC 28'接收的CRC错
  219.  */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/594009
推荐阅读
相关标签
  

闽ICP备14008679号