private void ParseTrack1() { if (String.IsNullOrEmpty(_track1Data)) { throw new MagstripCardParseException("Track 1 data is empty."); } string[] parts = _track1Data.Split(new char[] { FIELD_SEPARATOR }, StringSplitOptions.None); if (parts.Length != 3) { throw new MagstripCardParseException("Missing last field separator (^) in track 1 data."); } _accountNumber = CreditCardUtils.StripNonDigits(parts[0]); if (!String.IsNullOrEmpty(parts[1])) { _accountHolder = parts[1].Trim(); } if (!String.IsNullOrEmpty(_accountHolder)) { int nameDelim = _accountHolder.IndexOf("/"); if (nameDelim > -1) { _lastName = _accountHolder.Substring(0, nameDelim); _firstName = _accountHolder.Substring(nameDelim + 1); } } //date format: YYMM string expDate = parts[2].Substring(0, 4); _expYear = ParseExpireYear(expDate); _expMonth = ParseExpireMonth(expDate); }
private int ParseExpireMonth(string s) { s = CreditCardUtils.StripNonDigits(s); if (!ValidateExpiration(s)) { return(0); } if (s.Length > 4) { s = s.Substring(0, 4); } return(int.Parse(s.Substring(2, 2))); }
private void ParseTrack2() { if (String.IsNullOrEmpty(_track2Data)) { throw new MagstripCardParseException("Track 2 data is empty."); } if (_track2Data.StartsWith(";")) { _track2Data = _track2Data.Substring(1); } //may have already parsed this info out if track 1 data present if (String.IsNullOrEmpty(_accountNumber) || (_expMonth == 0 || _expYear == 0)) { //Track 2 only cards //Ex: ;1234123412341234=0305101193010877? int sepIndex = _track2Data.IndexOf('='); if (sepIndex < 0) { throw new MagstripCardParseException("Invalid track 2 data."); } string[] parts = _track2Data.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 2) { throw new MagstripCardParseException("Missing field separator (=) in track 2 data."); } if (String.IsNullOrEmpty(_accountNumber)) { _accountNumber = CreditCardUtils.StripNonDigits(parts[0]); } if (_expMonth == 0 || _expYear == 0) { //date format: YYMM string expDate = parts[1].Substring(0, 4); _expYear = ParseExpireYear(expDate); _expMonth = ParseExpireMonth(expDate); } } }
private int ParseExpireYear(string s) { s = CreditCardUtils.StripNonDigits(s); if (!ValidateExpiration(s)) { return(0); } if (s.Length > 4) { s = s.Substring(0, 4); } int y = int.Parse(s.Substring(0, 2)); if (y > 80) { y += 1900; } else { y += 2000; } return(y); }