Проверка номера кредитной карты - 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); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д