Kumar_Niraj Ответов: 2

Как узнать, является ли карта дебетовой или кредитной?


Привет,
Мне нужно выяснить, является ли карта дебетовой картой и кредитной картой. Не могли бы вы предоставить код в C#.Net. Я могу проверить кредитную карту, но не могу проверить дебетовую карту. Ниже приведен код подтверждения кредитной карты-

Проверка подлинности кредитной карты-
public static bool IsCardNumberValid(string cardNumber)
{
  int i, checkSum = 0;

  // Compute checksum of every other digit starting from right-most digit
  for (i = cardNumber.Length - 1; i >= 0; i -= 2)
    checkSum += (cardNumber[i] - '0');

  // Now take digits not included in first checksum, multiple by two,
  // and compute checksum of resulting digits
  for (i = cardNumber.Length - 2; i >= 0; i -= 2)
  {
    int val = ((cardNumber[i] - '0') * 2);
    while (val > 0)
    {
      checkSum += (val % 10);
      val /= 10;
    }
  }

  // Number is valid if sum of both checksums MOD 10 equals 0
  return ((checkSum % 10) == 0);
}
Удаление всех нецифровых символов из номера кредитной карты.
public static string NormalizeCardNumber(string cardNumber)
{
  if (cardNumber == null)
    cardNumber = String.Empty;

  StringBuilder sb = new StringBuilder();

  foreach (char c in cardNumber)
  {
    if (Char.IsDigit(c))
      sb.Append(c);
  }

  return sb.ToString();
}
Класс для хранения информации о типе кредитной карты-
public enum CardType
{
  Unknown = 0,
  MasterCard = 1,
  VISA = 2,
  Amex = 3,
  Discover = 4,
  DinersClub = 5,
  JCB = 6,
  enRoute = 7
}

private class CardTypeInfo
{
  public CardTypeInfo(string regEx, int length, CardType type)
  {
    RegEx = regEx;
    Length = length;
    Type = type;
  }

  public string RegEx { get; set; }
  public int Length { get; set; }
  public CardType Type { get; set; }
}

// Array of CardTypeInfo objects.
// Used by GetCardType() to identify credit card types.
private static CardTypeInfo[] _cardTypeInfo =
{
  new CardTypeInfo("^(51|52|53|54|55)", 16, CardType.MasterCard),
  new CardTypeInfo("^(4)", 16, CardType.VISA),
  new CardTypeInfo("^(4)", 13, CardType.VISA),
  new CardTypeInfo("^(34|37)", 15, CardType.Amex),
  new CardTypeInfo("^(6011)", 16, CardType.Discover),
  new CardTypeInfo("^(300|301|302|303|304|305|36|38)", 
                   14, CardType.DinersClub),
  new CardTypeInfo("^(3)", 16, CardType.JCB),
  new CardTypeInfo("^(2131|1800)", 15, CardType.JCB),
  new CardTypeInfo("^(2014|2149)", 15, CardType.enRoute),
};

public static CardType GetCardType(string cardNumber)
{
  foreach (CardTypeInfo info in _cardTypeInfo)
  {
    if (cardNumber.Length == info.Length && 
        Regex.IsMatch(cardNumber, info.RegEx))
      return info.Type;
  }

  return CardType.Unknown;
}

Спасибо,
Нирадж Кумар.

Что я уже пробовал:

Я попытался использовать инструкцию else, в которой пытался найти подтверждение дебетовой карты.

F-ES Sitecore

Если это возможно, я уверен, что вы легко найдете результаты в Google. Если вы не можете найти решение с помощью Google, то это, вероятно, невозможно.

Richard MacCutchan

Это не проблема кодирования: дебетовые карты идентифицируются по номерам на них, так же как и кредитные карты.

2 Ответов

Рейтинг:
13

Dave Kreskowiak

Во-первых, если вы хотите узнать погоду, выйдите на улицу и посмотрите вверх.

Если вы хотите узнать, является ли карта дебетовой или кредитной, вы не можете этого сделать. Нет никакого способа определить это только по данным на карте.


OriginalGriff

На самом деле, вы можете - это все в префиксе номера карты, по-видимому.
https://en.wikipedia.org/wiki/Payment_card_number
https://www.bincodes.com/creditcard-checker/

К сожалению, вам нужен полный список кодов ячеек, а банки не любят просто раздавать их ... :смеяться:

Dave Kreskowiak

Вероятно, поэтому каждый газовый (бензиновый для британцев) насос, которым я пользуюсь, спрашивает меня: "это дебетовая или кредитная карта?". :)

Рейтинг:
1

MadMyche

Эта информация отсутствует на карте; об этом знает только эмитент (банк), и вам нужно будет связаться с ним, чтобы узнать это.

Другими словами, вам придется пройти через API для тех, кто обрабатывает вашу кредитную карту, чтобы выяснить, какое поле ответа соответствует тому, что вы хотите знать.

Поищите это Authorize.net ответ WSDL для tns:BankAccountType
https://api.authorize.net/soap/v1/Service.asmx?wsdl[^]

Возможно, вы также захотите заглянуть в Виза Безопасную Дистанционную Торговлю и аналогичные продукты для других поставщиков карт, а также платежных систем