Пример #1
0
        private void ProcessMembank(TLVObject memBank, EMVCard card)
        {
            if (memBank.Tag == 0x70 || memBank.Tag == 0x77)
            {
                var membankInner = memBank.ReadInnerTlvTags();

                foreach (var tag in membankInner)
                {
                    switch (tag.Tag)
                    {
                    case 0x56:
                        //Handle track 1 data
                        break;

                    case 0x57:
                        //Handle track 2 data
                        break;

                    case 0x58:
                        //Handle track 3 data
                        break;

                    case 0x59:
                    case 0x5F24:    //Handle expiration date
                    {
                        var bcdDate = tag.Value;
                        card.ExpirationDate = new DateTime(2000 + (int)FromBCD(bcdDate[0]),
                                                           (int)FromBCD(bcdDate[1]), (int)FromBCD(bcdDate[2]));
                    }
                    break;

                    case 0x5F25:
                    {
                        var bcdDate = tag.Value;
                        card.IssuedDate = new DateTime(2000 + (int)FromBCD(bcdDate[0]),
                                                       (int)FromBCD(bcdDate[1]), (int)FromBCD(bcdDate[2]));
                    }
                    break;

                    case 0x5A:
                        card.PAN = tag.Value;
                        break;

                    case 0x5F20:
                    case 0x9F0B:
                        card.CardholderName = Encoding.ASCII.GetString(tag.Value);
                        break;
                    }
                }
            }
        }
Пример #2
0
        static void ProcessMembank(TLVObject memBank)
        {
            if (memBank.Tag == 0x70 || memBank.Tag == 0x77)
            {
                var membankInner = memBank.ReadInnerTlvTags();

                foreach (var tag in membankInner)
                {
                    switch (tag.Tag)
                    {
                    case 0x56:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("TRACK 1 DATA:");
                        break;

                    case 0x57:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("TRACK 2 DATA:");
                        break;

                    case 0x58:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("TRACK 3 DATA:");
                        break;

                    case 0x59:
                    case 0x5F24:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("EXPIRATION DATE:");
                        break;

                    case 0x5A:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("PAN DATA:");
                        break;

                    case 0x5F20:
                    case 0x9F0B:
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine("Cardholder name: " + Encoding.ASCII.GetString(tag.Value));
                        break;
                    }

                    WriteTag(tag);

                    Console.ResetColor();
                }
            }
        }
Пример #3
0
        private bool ProcessInnerRecord(TLVObject readRecordResult, ref byte[] aidMin, ref byte priorityMin)
        {
            if (readRecordResult != null &&
                (readRecordResult.Tag == 0x77 || readRecordResult.Tag == 0x70))
            {
                var readRecordResultInner = readRecordResult.ReadInnerTlvTags();

                var template = readRecordResultInner.FirstOrDefault(x => x.Tag == 0x61);
                if (template == null)
                {
                    return(false);
                }

                var templateInner = template.ReadInnerTlvTags();

                var aidTag      = templateInner.FirstOrDefault(x => x.Tag == 0x4F); //AID Tag
                var priorityTag = templateInner.FirstOrDefault(x => x.Tag == 0x87); //Priority Tag

                if (aidTag != null && priorityTag != null)
                {
                    var aid = aidTag.Value;

                    var priority = priorityTag.Value[0];

                    if (priority < priorityMin)
                    {
                        priorityMin = priority;
                        aidMin      = aid;
                    }
                }

                return(true);
            }

            return(false);
        }
Пример #4
0
 static void WriteTag(TLVObject obj)
 {
     Console.WriteLine(string.Format("Tag: {0:X2} Value: [{1}]", obj.Tag.Value, ByteToHex(obj.Value)));
 }