using System.Globalization;
public static void Main()
byte[] atrByteArray = new byte[] {59, 5, 0, 2 , 241, 6, 115};
var cardNumber = FromByteArray(atrByteArray, 0, 1, 16);
var facilityCode = FromByteArray(atrByteArray, 0, 17, 8);
Console.WriteLine(string.Format("Card number is: {0} and facility code is: {1}", cardNumber, facilityCode));
public static long FromByteArray(byte[] atrByteArray, int byteOffset, int bitOffset, int numberOfBits)
var hexString = ByteArrayToString(atrByteArray);
var start_number = Int64.Parse( hexString, NumberStyles.HexNumber );
Int64 a_26_only = start_number & 0x3FFFFFF;
Int64 result = (a_26_only >> bitOffset) & (long)(Math.Pow(2,numberOfBits)-1);
public static string ByteArrayToString(byte[] ba)
StringBuilder hex = new StringBuilder(ba.Length * 2);
hex.AppendFormat("{0:x2}", b);