Проверка номера кредитной карты - C#

Узнай цену своей работы

Формулировка задачи:

Всего неделю изучаю язык, не особо понимаю что и как в нём, надеюсь на вашу помощь. Мы имеем 3 карты: American Express(состоит из 15 цифр и код начинается с 34 или 37), MasterCard(состоит из 16 цифр и код начинается с 51, 52, 53, 54, или 55), Visa(состоит из 13 или 16 цифр и код начинается с 4). INVALID, если карта не начинается с определённых цифр. Нам надо проверить является эта карта законной и какое у неё наименование. Если не законная Для примера возьмём карту: 378282246310005. 1) Чтобы проверить является ли карта свободной умножаем каждое второе число на 2: 7 • 2 + 2 • 2 + 2 • 2 + 4 • 2 + 3 • 2 + 0 • 2 + 0 • 2 2) Получаем: 14 + 4 + 4 + 8 + 6 + 0 + 0. 3) Все полученные цифры складываем: 1 + 4 + 4 + 4 + 8 + 6 + 0 + 0 = 27. 4)Теперь добавим эту сумму (27) к сумме цифр, которые не были умножены на 2: 27 + 3 + 8 + 8 + 2 + 6 + 1 + 0 + 5 = 60. 5) Последняя цифра в этой сумме (60) равна 0, поэтому карта является законной. Я понимаю чисто на словах что нужно проверить, а вот с написанием большие проблемы. 1) Проверяем является ли введённая строка целым числом. Если нет- сразу выводим INVALID. 2) Проверяем на нужное количество цифр в коде. 15- American Express, 16- MasterCard, Visa- 13 или 16. Если нет- выводим INVALID. 3) Проверяем с каких чисел начинается код. American Express- 34 или 37, MasterCard- 51, 52, 53, 54, или 55, Visa- 4. Если с других цифр- выводим INVALID. 4) Проверяем является ли карта законной(пример вычисления есть выше). Если не законная, то выводим INVALID. 5) Если манипуляции выше прошли, то выводим нужную карту и то, что она законна.

Решение задачи: «Проверка номера кредитной карты»

textual
Листинг программы
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
 
class Program
{
    private static Dictionary<string, Regex> cards = new Dictionary<string, Regex>()
    {
        ["American Express"] = new Regex(@"\A3[47][0-9]{13}\z"),
        ["MasterCard"] = new Regex(@"\A5[1-5][0-9]{14}\z"),
        ["Visa"] = new Regex(@"\A4[0-9]{12}(?:[0-9]{3})?\z")
    };
 
    public static void Main()
    {
        while (true)
        {
            Console.Write("Input card number: ");
            string card = Console.ReadLine();
            if (card == null) break;
            string answer = cards.SingleOrDefault(kv => kv.Value.IsMatch(card)).Key;
            if (answer == null || card.Select((ch, i) => (ch - '0') * (i % 2 + 1)).Sum(x => x > 9 ? x % 10 + 1 : x) % 10 != 0) answer = "INVALID";
            Console.WriteLine(answer);
        }
    }
}

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы