我正在使用LineaPro 5 peripheral开发Xamarin.iOS应用程序,该应用程序可以扫描条形码,RFID卡和刷磁卡。我具有基本的RFID功能,并且我关心的Linea数据是卡的UID(字节数组)。

在与Web服务器交互的应用程序中,用于标识这些卡的格式为十进制,因此我有以下代码将UID字节数组转换为所需的十进制字符串:

// Handler attached to the RFID Scan event invoked by the LineaPro
void HandleRFIDScanned (DTDeviceDelegate Dispatcher, RFIDScannedEventArgs Arguments)
{
  if ( Arguments == null || Arguments.Data == null || Arguments.Data.UID == null )
    InvalidRFIDScanned ();
  else
  {
    byte[] SerialArray = new byte[Arguments.Data.UID.Length];
    System.Runtime.InteropServices.Marshal.Copy(Arguments.Data.UID.Bytes, SerialArray, 0, SerialArray.Length);
    string Hex = Util.ByteArrayToHexString (SerialArray);
    if ( string.IsNullOrWhiteSpace (Hex) )
      InvalidRFIDScanned ();
    else
    {
      string DecimalSerial = ulong.Parse (Hex, System.Globalization.NumberStyles.HexNumber).ToString ();
      ValidRFIDScanned (DecimalSerial);
    }
  }

  //Disconnecting card so another can be scanned
  NSError RFDisconnectError;
  LineaPRO.Shared.Device.RfRemoveCard (Arguments.CardIndex, out RFDisconnectError);
}

//Byte array to hexadecimal string conversion
public static string ByteArrayToHexString (byte[] Bytes)
{
  StringBuilder hex = new StringBuilder();
  foreach (byte b in Bytes)
    hex.AppendFormat("{0:x2}", b);
  return hex.ToString();
}

但是,我发现我们发行的某些RFID卡存在一个非常令人担忧的问题。我们提供了移动应用程序需要扫描的各种样式和ISO标准不同的卡片。其中一个(我相信Mifare Classic标准,尽管目前无法确定)始终是该特定RFID卡提供商的十位数字,尽管其中一些以数字0开头,如下图所示:

这将导致我的字节数组转换出现巨大问题,因为十六进制字符串被解析为无符号长型,并且前导零被丢弃。为了将这些RFID卡ID存储到数据库中,我们在另一应用程序中使用了另一组USB RFID读取器,尽管这些USB读取器能够以某种方式获取前导零。

因此,在使用移动应用程序时会发生冲突,其中删除了UID的前导零,因为传递给API的数据是对照数据库进行检查的,由于缺少零,因此不被视为匹配项。

我已经在事件处理程序中查看了LineaPro接收到的所有数据,并且字节数组是保存卡UID的唯一内容,因此,只要我们使用UID的十进制表示,就无法让移动应用程序确定是否应存在零,除非:
  • 也许某些RFID标准对UID的十进制表示中的位数有特定的限制?例如,如果这种类型的卡始终具有偶数或特定数目的十进制数字,那么我可以在必要时用额外的零填充字符串。
  • LineaPro不能提供足够的数据,在这种情况下,我可能会感到困惑。
  • 最佳答案

    您没有足够的信息来解决您的问题。如果ID号始终假定为10位数字,则使用格式字符串根据需要添加前导零非常简单。

    我会说总是尝试将UID填充到前导零到10位数字,然后通过它运行大量测试值。

    就像您说的那样,如果您的设备从ID的开头删除了有效数据,那么您就被搞砸了。

    关于c# - RFID-领先的零发行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19470045/

    10-10 22:39