using System.Globalization;
public partial class CreditCardTransaction
private int messageTypeField;
private string attemptMtiField;
private string sourceField;
private bool isOnUsBinField;
private bool isOnUsMerchantField;
private bool isBonusWebField;
private char installTypeField;
private bool isPinEnteredField;
private int terminalTypeField;
private string acquirerIdField;
private string responseCodeField;
private string terminalIdField;
private string acquirerNameField;
private string bkmMerchantIdField;
private int panLengthField;
private string transactionMessageGuidField;
private string processingCodeField;
private decimal billingAmountField;
private string billingCurrencyCodeField;
private string stanField;
private System.DateTime transactionDateTimeField;
private System.DateTime entranceDateTimeField;
private System.DateTime cardExpireDateField;
private string posEntryModeField;
private string psqnField;
private string merchantIdField;
private string posVersionNumberField;
private decimal originalAmountField;
private string originalCurrencyCodeField;
private string panCountryCodeField;
private string fwdCountryCodeField;
private string authorizationCodeField;
private string eCommerceIndicatorField;
private char cavvResultField;
private decimal totalLimitField;
private decimal remainingLimitField;
private int pinStatusField;
private char cardTypeField;
private int cardDomainField;
private int arqcResultField;
private decimal bonusAmountField;
private string f055Field;
private bool hasPendingLastResponseField;
private bool hasCvvField;
private bool hasCvv2Field;
private long customerNoField;
return this.messageTypeField;
this.messageTypeField = value;
return this.attemptMtiField;
this.attemptMtiField = value;
this.sourceField = value;
return this.isOnUsBinField;
this.isOnUsBinField = value;
public bool IsOnUsMerchant
return this.isOnUsMerchantField;
this.isOnUsMerchantField = value;
return this.isBonusWebField;
this.isBonusWebField = value;
return this.installTypeField;
this.installTypeField = value;
return this.isPinEnteredField;
this.isPinEnteredField = value;
return this.terminalTypeField;
this.terminalTypeField = value;
return this.acquirerIdField;
this.acquirerIdField = value;
public string ResponseCode
return this.responseCodeField;
this.responseCodeField = value;
return this.terminalIdField;
this.terminalIdField = value;
public string AcquirerName
return this.acquirerNameField;
this.acquirerNameField = value;
public string BkmMerchantId
return this.bkmMerchantIdField;
this.bkmMerchantIdField = value;
return this.panLengthField;
this.panLengthField = value;
public string TransactionMessageGuid
return this.transactionMessageGuidField;
this.transactionMessageGuidField = value;
public string ProcessingCode
return this.processingCodeField;
this.processingCodeField = value;
public decimal BillingAmount
return this.billingAmountField;
this.billingAmountField = value;
public string BillingCurrencyCode
return this.billingCurrencyCodeField;
this.billingCurrencyCodeField = value;
public System.DateTime TransactionDateTime
return this.transactionDateTimeField;
this.transactionDateTimeField = value;
public System.DateTime EntranceDateTime
return this.entranceDateTimeField;
this.entranceDateTimeField = value;
public System.DateTime CardExpireDate
return this.cardExpireDateField;
this.cardExpireDateField = value;
public string PosEntryMode
return this.posEntryModeField;
this.posEntryModeField = value;
return this.merchantIdField;
this.merchantIdField = value;
public string PosVersionNumber
return this.posVersionNumberField;
this.posVersionNumberField = value;
public decimal OriginalAmount
return this.originalAmountField;
this.originalAmountField = value;
public string OriginalCurrencyCode
return this.originalCurrencyCodeField;
this.originalCurrencyCodeField = value;
public string PanCountryCode
return this.panCountryCodeField;
this.panCountryCodeField = value;
public string FwdCountryCode
return this.fwdCountryCodeField;
this.fwdCountryCodeField = value;
public string AuthorizationCode
return this.authorizationCodeField;
this.authorizationCodeField = value;
public string ECommerceIndicator
return this.eCommerceIndicatorField;
this.eCommerceIndicatorField = value;
return this.cavvResultField;
this.cavvResultField = value;
public decimal TotalLimit
return this.totalLimitField;
this.totalLimitField = value;
public decimal RemainingLimit
return this.remainingLimitField;
this.remainingLimitField = value;
return this.pinStatusField;
this.pinStatusField = value;
return this.cardTypeField;
this.cardTypeField = value;
return this.cardDomainField;
this.cardDomainField = value;
return this.arqcResultField;
this.arqcResultField = value;
public decimal BonusAmount
return this.bonusAmountField;
this.bonusAmountField = value;
public bool HasPendingLastResponse
return this.hasPendingLastResponseField;
this.hasPendingLastResponseField = value;
this.hasCvvField = value;
return this.hasCvv2Field;
this.hasCvv2Field = value;
return this.customerNoField;
this.customerNoField = value;
private static void Dump(object o)
string json = JsonConvert.SerializeObject(o, Formatting.Indented);
public static void Main()
Console.WriteLine("Hello World");
string sRequest = "101000100MC100010001010NN002000000001042003684 0050328401OFFICE DEPOT #3284 SUNRISE US 165235153965321311 77000000855782610030000000002365429491259171612070116201059430911034445012000620 000000043403840792US578261 0000010000000000007634599C12000000000000YN3010000000000030143";
CreditCardTransaction cct = Parser(sRequest);
public static CreditCardTransaction Parser(string sRequest)
CreditCardTransaction cct = new CreditCardTransaction();
int.TryParse(text.Substring(index, 1), out mti);
cct.HasPendingLastResponse = (mti == 2);
cct.Mti = text.Substring(index, 4);
cct.AttemptMti = text.Substring(index, 4);
cct.Source = text.Substring(index, 2);
cct.IsOnUsBin = (text.Substring(index, 1) == "1");
cct.IsOnUsMerchant = (text.Substring(index, 1) == "1");
if (int.TryParse(text.Substring(index, 4), out Otc))
if (int.TryParse(text.Substring(index, 4), out Ots))
if (int.TryParse(text.Substring(index, 2), out Ote))
cct.IsBonusWeb = (text.Substring(index, 1) == "Y");
cct.InstallType = char.Parse(text.Substring(index, 1));
cct.IsPinEntered = (text.Substring(index, 1) == "1");
int.TryParse(text.Substring(index, 2), out termType);
cct.TerminalType = termType;
cct.Rrn = text.Substring(index, 12);
cct.AcquirerId = text.Substring(index, 11).Trim();
cct.ResponseCode = text.Substring(index, 2);
if (cct.HasPendingLastResponse && (cct.ResponseCode != "00"))
cct.HasPendingLastResponse = false;
cct.TerminalId = text.Substring(index, 8);
cct.AcquirerName = text.Substring(index, 40);
cct.BkmMerchantId = text.Substring(index, 16).Trim();
if (int.TryParse(text.Substring(index, 2), out PanLength))
cct.PanLength = PanLength;
cct.Pan = text.Substring(index, 19).Trim();
long TransactionMessageGuid = 0;
if (long.TryParse(text.Substring(index, 16), out TransactionMessageGuid))
cct.TransactionMessageGuid = TransactionMessageGuid.ToString();
cct.ProcessingCode = text.Substring(index, 6);
decimal BillingAmount = 0;
if (decimal.TryParse(text.Substring(index, 10) + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + text.Substring(index + 10, 2), out BillingAmount))
cct.BillingAmount = BillingAmount;
cct.BillingCurrencyCode = text.Substring(index, 3).Trim();
cct.Stan = text.Substring(index, 6);
int month = 0, day = 0, hour = 0, minute = 0, second = 0;
time = text.Substring(index, 6);
date = text.Substring(index, 4);
int.TryParse(date.Substring(0, 2).Trim(), out month);
int.TryParse(date.Substring(2, 2).Trim(), out day);
int.TryParse(time.Substring(0, 2).Trim(), out hour);
int.TryParse(time.Substring(2, 2).Trim(), out minute);
int.TryParse(time.Substring(4, 2).Trim(), out second);
if (month == 0 || day == 0)
cct.TransactionDateTime = DateTime.Now;
cct.TransactionDateTime = new DateTime(DateTime.Now.Year, month, day, hour, minute, second);
string expiryDate = text.Substring(index, 4);
int expYear = int.Parse(expiryDate.Substring(0, 2));
int expMonth = int.Parse(expiryDate.Substring(2, 2));
if (!(expYear == 0 || expMonth == 0))
cct.CardExpireDate = new DateTime(2000 + expYear, expMonth, 1).AddMonths(1).AddDays(-1);
cct.CardExpireDate = new DateTime(1900, 1, 1);
cct.Mcc = text.Substring(index, 4);
cct.PosEntryMode = text.Substring(index, 4);
cct.Psqn = text.Substring(index, 2);
cct.MerchantId = text.Substring(index, 15);
cct.PosVersionNumber = text.Substring(index, 3).Trim();
decimal OriginalAmount = 0;
if (decimal.TryParse(text.Substring(index, 10) + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + text.Substring(index + 10, 2), out OriginalAmount))
cct.OriginalAmount = OriginalAmount;
cct.OriginalCurrencyCode = text.Substring(index, 3);
cct.PanCountryCode = text.Substring(index, 3);
cct.FwdCountryCode = text.Substring(index, 2);
cct.AuthorizationCode = text.Substring(index, 6).Trim();
cct.ECommerceIndicator = text.Substring(index, 2).Trim();
cct.CavvResult = char.Parse(text.Substring(index, 1));
if (decimal.TryParse(text.Substring(index, 10) + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + text.Substring(index + 10, 2), out TotalLimit))
cct.TotalLimit = TotalLimit;
decimal RemainingLimit = 0;
if (decimal.TryParse(text.Substring(index, 10) + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + text.Substring(index + 10, 2), out RemainingLimit))
cct.RemainingLimit = RemainingLimit;
if (int.TryParse(text.Substring(index, 1), out PinStatus))
cct.PinStatus = PinStatus;
cct.CardType = char.Parse(text.Substring(index, 1));
int.TryParse(text.Substring(index, 1), out cardDomain);
cct.CardDomain = cardDomain;
if (int.TryParse(text.Substring(index, 1), out ArqcResult))
cct.ArqcResult = ArqcResult;
if (decimal.TryParse(text.Substring(index, 10) + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + text.Substring(index + 10, 2), out BonusAmount))
cct.BonusAmount = BonusAmount;
cct.HasCvv = text.Substring(index, 1) == "Y";
cct.HasCvv2 = text.Substring(index, 1) == "Y";
cct.CustomerNo = long.Parse(text.Substring(index, 16).Trim());
Console.WriteLine("index:" + index);