Это для задания. Мне нужно создать программу для сэндвич-магазина. Частью этого является проверка информации о платеже пользователя. Руководящие принципы для этого задания:C# Подтверждение ввода пользователя как номер кредитной карты
Номер кредитной карты должен быть 16 цифр; первые 4 цифры должны быть следующими: 1298, 1267, 4512, 4567, 8901, 8933
Срок годности должен быть 2 цифры за месяц, 4 цифры за год. Месяц должен быть 01-12. Год должен начинаться с «20». Дата должна быть больше текущего текущего месяца и года и менее 6 лет от текущего фактического месяца и года.
У меня есть текстовое поле для каждого номера, txtCardNumber, txtSecuritycode и txtExpiration. У меня есть работы, но я думаю, что это беспорядочно. Что было бы лучше? И можно ли использовать только один метод Validate()
вместо отдельного для каждого?
public bool IsValidCard()
{
if (txtCardNumber.Text.StartsWith("1298") ||
txtCardNumber.Text.StartsWith("1267") ||
txtCardNumber.Text.StartsWith("4512") ||
txtCardNumber.Text.StartsWith("4567") ||
txtCardNumber.Text.StartsWith("8901") ||
txtCardNumber.Text.StartsWith("8933"))
{
if (Regex.Replace(txtCardNumber.Text, @"\s+", "").Length == 16)
{
return true;
}
}
return false;
}//end IsValidCard()
public bool IsValidSecurityCode()
{
bool isValid = Regex.Match(txtSecurityCode.Text, @"^\d{3}$").Success;
return isValid;
}//end IsValidSecurityCode()
public bool IsValidExpiration()
{
string[] date = Regex.Split(txtExpiration.Text, "/");
string[] currentDate = Regex.Split(DateTime.Now.ToString("MM/yyyy"), "/");
int compareYears = string.Compare(date[1], currentDate[1]);
int compareMonths = string.Compare(date[0], currentDate[0]);
//if expiration date is in MM/YYYY format
if (Regex.Match(txtExpiration.Text, @"^\d{2}/\d{4}$").Success)
{
//if month is "01-12" and year starts with "20"
if (Regex.Match(date[0], @"^[0][1-9]|[1][0-2]$").Success)
{
//if expiration date is after current date
if ((compareYears == 1) || (compareYears == 0 && (compareMonths == 1)))
{
return true;
}
}
}
return false;
}//end IsValidExpiration
Примечание: Я не работал над утверждением шестилетнего требования.
не забывайте контрольную сумму https://en.wikipedia.org/wiki/Luhn_algorithm – WalterM
Вы можете использовать '^ (1298 | 1267 | 4512 | 4567 | 8901 | 8933) ([\ - \ s]? [ 0-9] {4}) {3} $ 'для номера кредитной карты,'^(0 [1-9] {1} | 1 [0-2] {1}) $ 'за месяц и'^20 [ 0-9] {2} $ 'за год. Как только они будут проверены, вам необходимо проверить состояние 6 лет, которое зависит от текущей даты и не может быть выполнено с помощью 'Regex'. –
@WalterM, алгоритм Луна довольно милый, но, вероятно, переборщик для моих целей. –