Пример #1
0
        public override bool Equals(object other)
        {
            if (!(other is CreditCardDetails))
            {
                return(false);
            }

            CreditCardDetails card = (CreditCardDetails)other;

            return(card.Month == this.Month &&
                   card.Year == this.Year &&
                   card.CardNumber == this.CardNumber &&
                   card.CardVerificationValue == this.CardVerificationValue);
        }
        private CreditCardDetails GenerateRandomCard(string prefix, int length, BankAccountDetails bank)
        {
            string ccnumber = prefix;

            while (ccnumber.Length < (length - 1))
            {
                double rnd = (random.NextDouble() * 1.0f - 0f);

                ccnumber += Math.Floor(rnd * 10);
            }


            // reverse number and convert to int
            var reversedCCnumberstring = ccnumber.ToCharArray().Reverse();

            var reversedCCnumberList = reversedCCnumberstring.Select(c => Convert.ToInt32(c.ToString()));

            // calculate sum //Luhn Algorithm
            int sum = 0;
            int pos = 0;

            int[] reversedCCnumber = reversedCCnumberList.ToArray();

            while (pos < length - 1)
            {
                int odd = reversedCCnumber[pos] * 2;

                if (odd > 9)
                {
                    odd -= 9;
                }

                sum += odd;

                if (pos != (length - 2))
                {
                    sum += reversedCCnumber[pos + 1];
                }

                pos += 2;
            }

            // calculate check digit
            int checkdigit =
                Convert.ToInt32((Math.Floor((decimal)sum / 10) + 1) * 10 - sum) % 10;

            ccnumber += checkdigit;

            var date = DateTime.Now.AddYears(6).AddMonths(6);


            using (var db = new BankSystemContext())
            {
                var card = new CreditCardDetails
                {
                    BankAccountId         = bank.Id,
                    CardNumber            = ccnumber,
                    CardVerificationValue = (random.Next(1000) + "").PadLeft(3),
                    Month = date.Month,
                    Year  = date.Year
                };

                db.CreditCards.Add(card);
                db.SaveChanges();

                return(card);
            }
        }