public static ulong? convert(byte[] pacBits)
ulong cardId = (ulong)pacBits[3] + (ulong)256 * pacBits[2] + (ulong)256 * 256 * pacBits[1] + (ulong)256 * 256 * 256 * pacBits[0];
cardId |= 0xf800000000UL;
else if (pacBits.Length == 6)
ulong cardId = (ulong)pacBits[5] + (ulong)256 * pacBits[4] + (ulong)256 * 256 * pacBits[3] + (ulong)256 * 256 * 256 * pacBits[2] + (ulong)256 * 256 * 256 * 256 * pacBits[1];
cardId |= 0xff00000000UL;
else if (pacBits.Length >= 7)
ulong cardId = (ulong)pacBits[6] + (ulong)256 * pacBits[5] + (ulong)256 * 256 * pacBits[4] + (ulong)256 * 256 * 256 * pacBits[3] + (ulong)256 * 256 * 256 * 256 * pacBits[2] + (ulong)256 * 256 * 256 * 256 * 256 * pacBits[1];
cardId |= 0xf000000000UL;
cardId &= 0xf7ffffffffUL;
public static void Main()
Console.WriteLine($"Cas d'une carte HID Corp 1000 sur 25 bits");
byte[] ocppIdTag = new byte[6]{0x05, 0x01, 0x98, 0x81, 0x36, 0xAD};
Console.WriteLine($"ocppIdTag : {BitConverter.ToString(ocppIdTag).Replace("-", "")}");
var cardId = convert(ocppIdTag);
Console.WriteLine(string.Format("cardId: {0:X}", cardId));
Console.WriteLine(string.Format(" {0}", cardId));
Console.WriteLine($"Cas d'une carte HID Corp 1000 sur 30 bits");
ocppIdTag = new byte[7]{0x00, 0xC0, 0x16, 0xF7, 0x00, 0x07, 0xD2};
Console.WriteLine($"ocppIdTag : {BitConverter.ToString(ocppIdTag).Replace("-", "")}");
cardId = convert(ocppIdTag);
Console.WriteLine(string.Format("cardId: {0:X}", cardId));
Console.WriteLine(string.Format(" {0}", cardId));
Console.WriteLine($"Cas d'une mini-carte porte-clef sur 32 bits");
ocppIdTag = new byte[4]{0xAA, 0xBB, 0xCC, 0xDD};
Console.WriteLine($"ocppIdTag : {BitConverter.ToString(ocppIdTag).Replace("-", "")}");
cardId = convert(ocppIdTag);
Console.WriteLine(string.Format("cardId: {0:X}", cardId));
Console.WriteLine(string.Format(" {0}", cardId));