Определить тип кредитной карты числом?

Таблица MySQL MyISAM является комбинацией трех файлов:

  • файл КАДРА является определением таблицы.
  • файл MYD - то, где фактические данные хранятся.
  • файл MYI - то, где индексы, созданные на таблице, хранятся.

необходимо смочь восстановить путем копирования их в папке базы данных (В Linux, местоположение по умолчанию /var/lib/mysql/)

, необходимо сделать это, в то время как сервер не работает.

67
задан PaulG 10 April 2019 в 10:32
поделиться

10 ответов

Да, указанный вами сайт правильный. Многие сайты, в т.ч. Google Checkout, я полагаю, полагается на автоматическое определение типа карты. Это удобно, делает интерфейс менее загроможденным (на одно поле ввода меньше) и экономит время. Вперед!

32
ответ дан 24 November 2019 в 14:41
поделиться

Эта реализация на Python должна работать для AmEx, Discover, Master Card, Visa:

def cardType(number):
    number = str(number)
    cardtype = "Invalid"
    if len(number) == 15:
        if number[:2] == "34" or number[:2] == "37":
            cardtype = "American Express"
    if len(number) == 13:
        if number[:1] == "4":
            cardtype = "Visa"
    if len(number) == 16:
        if number[:4] == "6011":
            cardtype = "Discover"
        if int(number[:2]) >= 51 and int(number[:2]) <= 55:
            cardtype = "Master Card"
        if number[:1] == "4":
            cardtype = "Visa"
    return cardtype
1
ответ дан 24 November 2019 в 14:41
поделиться

Википедия содержит список большинства префиксов карт. Некоторые карточки отсутствуют по опубликованной вами ссылке. Также похоже, что предоставленная вами ссылка действительна.

Одна из причин, по которой следует запросить тип карты, - это дополнительная проверка, сравните то, что предоставил пользователь, с номером.

4
ответ дан 24 November 2019 в 14:41
поделиться

Я почти уверен, что по крайней мере для MasterCard, Visa, Discover и American Express, что это точно. Я никогда не работал ни с кем из других.

См. Самый низ этой страницы: http://www.merchantplus.com/resources/pages/credit-card-logos-and-test-numbers/

Также вам может быть полезно " http://www.beachnet.com/~hstiles/cardtype.html

Это довольно интересно: http://en.wikipedia.org/wiki/Bank_card_number

7
ответ дан 24 November 2019 в 14:41
поделиться

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

/**
* checks a given string for a valid credit card
* @returns:
*   -1  invalid
*       1   mastercard
*       2   visa
*       3   amex
*       4   diners club
*       5   discover
*       6   enRoute
*       7   jcb
*/
function checkCC(val) {
    String.prototype.startsWith = function (str) {
        return (this.match("^" + str) == str)
    }

    Array.prototype.has=function(v,i){
        for (var j=0;j<this.length;j++){
            if (this[j]==v) return (!i ? true : j);
        }
        return false;
    }

    // get rid of all non-numbers (space etc)
    val = val.replace(/[^0-9]/g, "");

    // now get digits
    var d = new Array();
    var a = 0;
    var len = 0;
    var cval = val;
    while (cval != 0) {
        d[a] = cval%10;
        cval -= d[a];
        cval /= 10;
        a++;
        len++;
    }

    if (len < 13)
        return -1;

    var cType = -1;

    // mastercard
    if (val.startsWith("5")) {
        if (len != 16)
            return -1;
        cType = 1;
    } else
    // visa
    if (val.startsWith("4")) {
        if (len != 16 && len != 13)
            return -1;
        cType = 2;
    } else
    // amex
    if (val.startsWith("34") || val.startsWith("37")) {
        if (len != 15)
            return -1;
        cType = 3;
    } else
    // diners
    if (val.startsWith("36") || val.startsWith("38") || val.startsWith("300") || val.startsWith("301") || val.startsWith("302") || val.startsWith("303") || val.startsWith("304") || val.startsWith("305")) {
        if (len != 14)
        return -1;
        cType = 4;
    } else
    // discover
    if (val.startsWith("6011")) {
        if (len != 15 && len != 16)
            return -1;
        cType = 5;
    } else
    // enRoute
    if (val.startsWith("2014") || val.startsWith("2149")) {
        if (len != 15 && len != 16)
            return -1;
        // any digit check
        return 6;
    } else
    // jcb
    if (val.startsWith("3")) {
        if (len != 16)
        return -1;
        cType = 7;
    } else
    // jcb
    if (val.startsWith("2131") || val.startsWith("1800")) {                                         

        if (len != 15)
        return -1;
        cType = 7;
    } else
    return - 1;
    // invalid cc company

    // lets do some calculation
    var sum = 0;
    var i;
    for (i = 1; i < len; i += 2) {
        var s = d[i] * 2;
        sum += s % 10;
        sum += (s - s%10) /10;
    }

    for (i = 0; i < len; i += 2)
        sum += d[i];

    // musst be %10
    if (sum%10 != 0)
        return - 1;

    return cType;
}
5
ответ дан 24 November 2019 в 14:41
поделиться

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

Этот вопрос обсуждается в Web Form Design Вроблевски на страницах 153-154. Он находится в разделе «Удаление вопросов» главы «Ненужные данные». В качестве примера приведен Paypal, который выделяет тип карты, когда вы вводите свой номер.

11
ответ дан 24 November 2019 в 14:41
поделиться

Я слышал одну вескую причину, чтобы заставить их выбирать (даже если вы можете это понять). Чтобы они знали список принимаемых вами кредитных карт.

21
ответ дан 24 November 2019 в 14:41
поделиться

Если все кредитные карты, которые вы принимаете, имеют одинаковые свойства, просто позвольте пользователю ввести номер карты и другие свойства (срок действия, CVV и т. Д.). Однако для некоторых типов карт необходимо ввести другие поля (например, дату начала или номер выпуска для карт UK Maestro). В этих случаях вам либо нужно иметь все поля, что сбивает пользователя с толку, либо какой-то Javascript, чтобы скрыть / показать соответствующие поля, что снова делает работу пользователя немного странной (поля исчезают / появляются по мере ввода номера кредитной карты) . В таких случаях я рекомендую сначала узнать тип карты.

1
ответ дан 24 November 2019 в 14:41
поделиться

Вот быстрый грязный способ автоматически определять тип карты и показывать ее пользователю во время набора.

Это означает а) пользователю не нужно его выбирать и б) они не будут тратить время на поиски раскрывающегося списка, которого не существует.

Очень простая версия jQuery для Amex, Visa и Mastercard. если вам нужны другие типы карт, вы можете использовать

 $('[id$=CreditCardNumber]').assertOne().keyup(function(){

        // rules taken from http://en.wikipedia.org/wiki/Credit_card_number#cite_note-GenCardFeatures-0
        var value = $(this).val();

        $('#ccCardType').removeClass("unknown");
        if ((/^4/).test(value)) {
            $('#ccCardType').html("Visa");
            return;
        }
        if ((/^5[1-5]/).test(value)) {
           $('#ccCardType').html("Mastercard");
           return;
        }
        if ((/^3[47]/).test(value)) {
           $('#ccCardType').html("Mastercard");
           return;
        }
        $('#ccCardType').html("Enter card number above");
        $('#ccCardType').addClass("unknown");
     });

Это jQuery, который сопровождает это (ASP.NET MVC):

  Card number: <%= Html.TextBox("PaymentDetails.CreditCardDetails.CreditCardNumber")%>
  Card Type: <span id="ccCardType" class="unknown">Enter card number above</span>

У меня есть правило css для .unknown для отображения серого текста.

2
ответ дан 24 November 2019 в 14:41
поделиться

Вот Полный код C # или VB для всех видов вещей, связанных с CC в codeproject.

  • IsValidNumber
  • GetCardTypeFromNumber
  • GetCardTestNumber
  • PassesLuhnTest

Эта статья появилась уже пару лет без отрицательных комментариев.

5
ответ дан 24 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: