Алгоритм Луна для валидации кредитных карт - 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;
}

Объяснение кода листинга программы

  1. В функции Luhn определены следующие переменные:
    • validationFlag - флаг валидации карты (0 - невалидная, 1 - валидная)
    • p - текущая сумма карты
    • sum - общая сумма карты
    • i - индекс текущего числа в числе карты
  2. Переменная validationFlag инициализируется значением 0.
  3. Переменная sum инициализируется значением 0.
  4. В цикле for перебираются все числа в числе карты в обратном порядке.
  5. Для каждого числа p проверяется, является ли оно четным (если (i + 1) % 2 == 0). Если это так, то число p умножается на 2.
  6. Если результат умножения числа p на 2 больше 9, то из результата вычитается 9.
  7. Полученное число p добавляется к sum.
  8. После перебора всех чисел в числе карты проверяется, является ли sum кратной 10 (т.е. sum % 10 == 0). Если это так, то переменная validationFlag устанавливается равной 1.
  9. Функция Luhn возвращает значение переменной validationFlag.
  10. В функции main определен массив card с числами карты.
  11. Функция Luhn вызывается с массивом card и его длиной в качестве аргументов.
  12. Результат функции Luhn сохраняется в переменной res.
  13. Если res равно 1, то выводится сообщение Card is valid.
  14. Если res не равно 1, то выводится сообщение Card is invalid.
  15. Программа возвращает 0, завершая свою работу.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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