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; } } } }
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(); } } }
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); }
static void WriteTag(TLVObject obj) { Console.WriteLine(string.Format("Tag: {0:X2} Value: [{1}]", obj.Tag.Value, ByteToHex(obj.Value))); }