Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как проверить правильность номера средитной карточки

Delphi , Синтаксис , Пароли



Автор: http://www.swissdelphicenter.ch

{-------------------------------------------------
  Returns:

   0  : Card is invalid or unknown
   1  : Card is a valid AmEx
   2  : Card is a valid Visa
   3  : Card is a valid MasterCard

  Ergebnis:

   0  : Unbekannte Karte
   1  : AmEx Karte
   2  : Visa Karte
   3  : MasterCard Karte
  -------------------------------------------------}

function CheckCC(c: string): Integer;
var
  card: string[21];
  Vcard: array[0..21] of Byte absolute card;
  Xcard: Integer;
  Cstr: string[21];
  y, x: Integer;
begin
  Cstr := '';
  FillChar(Vcard, 22, #0);
  card := c;
  for x := 1 to 20 do
    if (Vcard[x] in [48..57]) then
      Cstr := Cstr + chr(Vcard[x]);
  card := '';
  card := Cstr;
  Xcard := 0;
  if not odd(Length(card)) then
    for x := (Length(card) - 1) downto 1 do
    begin
      if odd(x) then
        y := ((Vcard[x] - 48) * 2)
      else
        y := (Vcard[x] - 48);
      if (y >= 10) then
        y := ((y - 10) + 1);
      Xcard := (Xcard + y)
    end
  else
    for x := (Length(card) - 1) downto 1 do
    begin
      if odd(x) then
        y := (Vcard[x] - 48)
      else
        y := ((Vcard[x] - 48) * 2);
      if (y >= 10) then
        y := ((y - 10) + 1);
      Xcard := (Xcard + y)
    end;
  x := (10 - (Xcard mod 10));
  if (x = 10) then
    x := 0;
  if (x = (Vcard[Length(card)] - 48)) then
    Result := Ord(Cstr[1]) - Ord('2')
  else
    Result := 0
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  case CheckCC(Edit1.Text) of
    0: Label1.Caption := 'Card is invalid or unknown';
    1: Label1.Caption := 'Card is a valid AmEx';
    2: Label1.Caption := 'Card is a valid Visa';
    3: Label1.Caption := 'Card is a valid MasterCard';
  end;
end;

Программа на Delphi для проверки корректности номера кредитной карты с использованием алгоритма Луна. Функция CheckCC принимает строку, представляющую собой номер кредитной карты, и возвращает целое число, указывающее является ли карта валидной (1 для AmEx, 2 для Visa, 3 для MasterCard) или нет (0).

Процедура Button1Click вызывается при клике на кнопку на форме. Она получает текст из редактора (Edit1.Text) и передает его в функцию CheckCC, а затем обновляет надпись (Label1.Caption) результатом.

Схема работы кода следующая:

  1. Функция CheckCC инициализирует пустую строку Cstr, заполняет массив Vcard нулевыми байтами, а затем копирует номер кредитной карты из входной строки в Cstr.
  2. Затем она проходит по Vcard и извлекает цифровые символы (0-9) в Cstr, игнорируя оставшиеся нецифровые символы.
  3. Если длина Cstr четная, функция рассчитывает чексум, удваивая каждое второе число, суммируя все цифры и вычисляя остаток от деления на 10. Если длина Cstr нечетная, функция рассчитывает чексум, суммируя все цифры без удвоения. Чексум хранится в Xcard.
  4. Затем она проверяет, совпадает ли последняя цифра Cstr с рассчитанным чексумом. Если они совпадают, карта считается валидной.
  5. Процедура Button1Click вызывает функцию CheckCC с текстом из редактора как входными данными и обновляет надпись соответствующим образом.

Некоторые предложения по улучшению кода:

  • Используйте более описательные имена переменных, чтобы сделать код более понятным.
  • Рассмотрите возможность использования отдельной функции для извлечения цифровых символов из входной строки, а не повторять это же логическое в обе циклы.
  • Вам может потребоваться добавление дополнительного обработки ошибок или валидации для недопустимых вводов (например, нецифровые символы).
  • Если вы планируете использовать этот код для производственных целей, вам может потребоваться реализация более robust безопасности, таких как хеширование и соление номеров кредитных карт.

В целом, это хорошая начальная работа, но она может нуждаться в некоторых оптимизациях и дополнительной проверке.

Статья описывает алгоритм проверки правильности номера средитной карточки, позволяющий определить тип карты (AmEx, Visa, MasterCard) или объявить ее недопустимой.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Пароли ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:06:26/0.0032520294189453/0