我正在开发一个需要读取 mifare 卡序列号的应用程序,我使用的语言是 C#。

我是 mifare reader 编程的新手,所以我很抱歉问愚蠢的问题。
首先我想知道 Mifare UID 和 Mifare Serial number 之间是否有区别。

我在 WinSCard 库的帮助下设法获得了 UID,但我不知道如何获得应该是 10 位数字的卡序列号。

如果您能指出我正确的方向,我将不胜感激。

先谢谢您的帮助。
问候

最佳答案

SCardTransmit 方法的 C# 签名

[StructLayout(LayoutKind.Sequential)]
public struct SCARD_IO_REQUEST
{
   public int dwProtocol;
   public int cbPciLength;
}

[DllImport("winscard.dll")]
public static extern int SCardTransmit(int hCard, ref SCARD_IO_REQUEST pioSendRequest,    ref byte SendBuff, int SendBuffLen, ref SCARD_IO_REQUEST pioRecvRequest,
ref byte RecvBuff, ref int RecvBuffLen);

读取 mifare 卡 UID 的代码示例
private SmartcardErrorCode GetUID(ref byte[] UID)
    {
        byte[] receivedUID = new byte[10];
        UnsafeNativeMethods.SCARD_IO_REQUEST request = new UnsafeNativeMethods.SCARD_IO_REQUEST();
        request.dwProtocol = 1; //SCARD_PROTOCOL_T1);
        request.cbPciLength =    System.Runtime.InteropServices.Marshal.SizeOf(typeof(UnsafeNativeMethods.SCARD_IO_REQUEST));
        byte[] sendBytes = new byte[] { 0xFF, 0xCA, 0x00, 0x00, 0x04 }; //get UID command      for Mifare cards

        int outBytes = receivedUID.Length;
        int status = SCardTransmit(_hCard, ref request, ref sendBytes[0], sendBytes.Length,  ref request, ref receivedUID[0], ref outBytes);

        UID = receivedUID.Take(8).ToArray();
        return status;
    }

关于c# - 使用 WinSCard 库获取 mifare 卡序列号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16856620/

10-09 19:24