Алгоритм Луна для валидации кредитных карт - C (СИ)
Формулировка задачи:
Привет всем!
Нужна помощь!
Нужно запрограммировать алгоритм луна для валидации кредитных карт! Проф тип жестокий а я новичёк пока не врубаю
Вот код но не пойму в чём проблема!??
#define _CRT_SECURE_NO_WARNING #include <stdio.h> #include <stdlib.h> #include <string.h> /* * */ int main(int argc, char** argv) { int Min = 12; int Max = 20; int CS = 0; int flag = 0; int i; int c = 0; char null[] = "00000000000000000000"; char CCN[] = "4111111111111111"; //Start Prefix int number_of_lines_C, C_Prefix; int index_pointer = 99; int length_card = strlen[CCN]; char Card_Buffer[] = " C[i][2]"; char A[][20] = { {"Visa"}, {"Master"}, {"Amex"}, {"Diners Club"}, {"Discover"}, {"JCB"}, }; int C[][4] = { //Cardprefix, digits, Prefixlength, Index in A[][] {41, 16, 2, 0}, {41, 13, 2, 0}, {51, 16, 2, 1}, {52, 16, 2, 1}, {53, 16, 2, 1}, {54, 16, 2, 1}, {34, 15, 2, 2}, {37, 15, 2, 2}, {36, 14, 2, 5}, {38, 14, 2, 2}, {6011, 16, 4, 3}, {3, 16, 1, 4}, {300, 14, 3, 5}, }; // Intervall between min and max if (length_Card >= Min && length_Card <= Max) { for (i = 0; i < length_Card; i++) { if (!(CCN[i] >= 48 && CCN[i] <= 57) { break; } } } null[20 = length_Card] = '\0'; strcat(null, CCN); for (i = 19, i >= 0; i--) { if (i % 2 == 0) { CS = (null[i] - 48)*2; if (CS > 9) { CS = CS = 9; } else { CS = CS; } } else { CS = null[i] - 48; } c = c + CS; } c = c - 0; return (EXIT_SUCCESS); }
Решение задачи: «Алгоритм Луна для валидации кредитных карт»
textual
Листинг программы
#include <stdio.h> int Luhn(const int* const cardNumber, const int const cardNumberLength) { int validationFlag = 0; int p = 0; int sum = 0; int i = 0; for (i = cardNumberLength - 1; i > -1; i--) { p = cardNumber[i]; if ((i + 1) % 2 == 0) { p = p * 2; } if (p > 9) { p = p - 9; } sum = sum + p; } if (sum % 10 == 0) { validationFlag = 1; } return validationFlag; } int main(void) { int card[] = {4, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9}; int res = Luhn(card, sizeof(card) / sizeof(*card)); if (res) { printf("Card is valid\n"); } else { printf("Card is invalid\n"); } return 0; }
Объяснение кода листинга программы
- В функции
Luhn
определены следующие переменные:validationFlag
- флаг валидации карты (0 - невалидная, 1 - валидная)p
- текущая сумма картыsum
- общая сумма картыi
- индекс текущего числа в числе карты
- Переменная
validationFlag
инициализируется значением 0. - Переменная
sum
инициализируется значением 0. - В цикле
for
перебираются все числа в числе карты в обратном порядке. - Для каждого числа
p
проверяется, является ли оно четным (если(i + 1) % 2 == 0
). Если это так, то числоp
умножается на 2. - Если результат умножения числа
p
на 2 больше 9, то из результата вычитается 9. - Полученное число
p
добавляется кsum
. - После перебора всех чисел в числе карты проверяется, является ли
sum
кратной 10 (т.е.sum % 10 == 0
). Если это так, то переменнаяvalidationFlag
устанавливается равной 1. - Функция
Luhn
возвращает значение переменнойvalidationFlag
. - В функции
main
определен массивcard
с числами карты. - Функция
Luhn
вызывается с массивомcard
и его длиной в качестве аргументов. - Результат функции
Luhn
сохраняется в переменнойres
. - Если
res
равно 1, то выводится сообщениеCard is valid
. - Если
res
не равно 1, то выводится сообщениеCard is invalid
. - Программа возвращает 0, завершая свою работу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д