Не могу прочитать с карты памяти SLE5528 - PullRequest
0 голосов
/ 18 мая 2019

Я все еще новичок в работе с карточками и кард-ридерами;Я использую C# для создания приложения, интегрированного с устройством чтения смарт-карт ACR38U, и у меня есть карты памяти SLE5528.Я использую следующий пример, чтобы присвоить уникальный идентификатор карте памяти (в данном случае 22222):

    int indx;

    tmpStr = "22222";
    ClearBuffers();

    SendBuff[0] = 0xFF;
    SendBuff[1] = 0xD0;
    SendBuff[2] = 0xA1;
    SendBuff[3] = 0x00;
    SendBuff[4] = 0x08;

    for (indx = 0; indx <= tmpStr.Length - 1; indx++)
    {
        if ((Convert.ToByte(tmpStr[indx])) != 0x00)
            SendBuff[indx + 5] = Convert.ToByte(tmpStr[indx]);
    }

    SendBuffLen = SendBuff[4] + 5;
    RecvBuffLen = 2;
    tmpStr = "";

    for (indx = 0; indx <= SendBuffLen - 1; indx++)
    {
        tmpStr = tmpStr + string.Format("{0:x2}", SendBuff[indx]).ToUpper() + " ";
    }

    retcode = SendAPDUandDisplay(0, tmpStr);

    if (retcode != ModWinsCard64.SCARD_S_SUCCESS)
    {
        return;
    }

    tData.Text = "";

Откуда я получаю ответ 90 00, что означает успех.И теперь я использую это для чтения с карты памяти:

    int indx;

    tData.Text = "";
    ClearBuffers();

    SendBuff[0] = 0xFF;
    SendBuff[1] = 0xB0;
    SendBuff[2] = 0xA1;
    SendBuff[3] = 0x00;
    SendBuff[4] = 0x08;

    SendBuffLen = 5;
    RecvBuffLen = SendBuff[4] + 2;
    tmpStr = "";

    for (indx = 0; indx <= SendBuffLen - 1; indx++)
    {
        tmpStr = tmpStr + string.Format("{0:x2}", (SendBuff[indx])).ToUpper() + " ";
    }

    retcode = this.SendAPDUandDisplay(2, tmpStr);

    if (retcode != ModWinsCard64.SCARD_S_SUCCESS)
    {
        return;
    }

    // 3. Display data read from card into Data textbox
    tmpStr = "";

    for (indx = 0; indx <= SendBuff[4] - 1; indx++)
    {
        tmpStr = tmpStr + Convert.ToChar(RecvBuff[indx]);
    }
    tData.Text = tmpStr;

    byte[] buffer = new byte[RecvBuffLen];

    for (int i = 0; i < RecvBuffLen; i++)
    {
        buffer[i] = RecvBuff[i];
    }

    byte[] buffer2 = new byte[8];
    for (int i = 0; i < buffer2.Length; i++)
    {
        if (buffer.Length > i)
            buffer2[i] = buffer[i];
    }

    int iCardID = BitConverter.ToInt32(buffer2, 0);
    MessageBox.Show(iCardID.ToString());

Но iCardID всегда -1 вместо 22222.Любые идеи о том, где я делаю не так?Возможно я пишу неправильно.

...