public static CardType ParseFromNumber(string number)
        {
            var validationExpression = new CreditCardValidationExpression();

            return(new[]
            {
                Amex,
                Visa,
                MasterCard,
                Discover
            }
                   .Where(card => Regex.IsMatch(number, validationExpression.GetExpression(card)))
                   .FirstOrDefault());
        }
        public bool ValidateCVV(string number, string cvv)
        {
            var validationExpression = new CreditCardValidationExpression();

            // American Express requires 4 digit cvv
            if (Regex.IsMatch(number, validationExpression.GetExpression(CardType.Amex)) &&
                Regex.IsMatch(cvv, "^[0-9]{4}$"))
            {
                return(true);
            }

            // while the rest require 3 digit cvv
            return((Regex.IsMatch(number, validationExpression.GetExpression(CardType.Visa)) ||
                    Regex.IsMatch(number, validationExpression.GetExpression(CardType.Discover)) ||
                    Regex.IsMatch(number, validationExpression.GetExpression(CardType.MasterCard))) &&
                   Regex.IsMatch(cvv, "^[0-9]{3}$"));
        }