Я все еще новичок в работе с карточками и кард-ридерами;Я использую 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
.Любые идеи о том, где я делаю не так?Возможно я пишу неправильно.