Подтвердить что ты не робот

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

У меня есть массив типов карт, который выглядит примерно так:

var cards = new Array();

cards [0] = {name: "VISA", length: "13,16", prefixes: "4", checkdigit: true};
cards [1] = {name: "VISA_DELTA/ELECTRON", length: "16", prefixes: "417500,4917,4913",     checkdigit: true};

однако идентификатор должен иметь возможность находить тип карты в зависимости от введенного номера карты. например, если они выбирают свой тип карты из выпадающего списка, то есть визы, то номер кредитной карты должен начинаться с 4 в противном случае, когда они отправляют форму, сообщение должно быть отображено, говоря, что это (независимо от того, какая карта, пожалуйста, измените карту тип). Любая помощь будет оценена.

идентификатор для текстового поля номер карты - CardNumber. Я не уверен, какая другая информация может понадобиться, у меня есть функция под названием Validate, которая проверяет остальную часть формы и вызов функции Calculate, который выполняет проверку luhn.

4b9b3361

Ответ 1

Я считаю, что вы, вероятно, ищете что-то вроде этого:

<script type="text/javascript">
function GetCardType(number)
{
    // visa
    var re = new RegExp("^4");
    if (number.match(re) != null)
        return "Visa";

    // Mastercard 
    // Updated for Mastercard 2017 BINs expansion
     if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(number)) 
        return "Mastercard";

    // AMEX
    re = new RegExp("^3[47]");
    if (number.match(re) != null)
        return "AMEX";

    // Discover
    re = new RegExp("^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)");
    if (number.match(re) != null)
        return "Discover";

    // Diners
    re = new RegExp("^36");
    if (number.match(re) != null)
        return "Diners";

    // Diners - Carte Blanche
    re = new RegExp("^30[0-5]");
    if (number.match(re) != null)
        return "Diners - Carte Blanche";

    // JCB
    re = new RegExp("^35(2[89]|[3-8][0-9])");
    if (number.match(re) != null)
        return "JCB";

    // Visa Electron
    re = new RegExp("^(4026|417500|4508|4844|491(3|7))");
    if (number.match(re) != null)
        return "Visa Electron";

    return "";
}
</script>

Первоначально опубликовано здесь @http://mel-green.com/2008/11/determine-credit-card-type-with-javascript/

Ответ 2

У карточных компаний есть довольно четко определенный список префиксов, характерных для типа карты.

Эти префиксы варьируются от одной цифры (все начиная с "5" - Mastercard) до некоторых строк длиной до шести или семи цифр для более неясных типов карт, а также для обычных карт, но возможность идентифицировать не только тип карты, но также банк-эмитент.

Вот один ресурс, который я нашел: http://www.beachnet.com/~hstiles/cardtype.html

Вы также можете увидеть Википедию: http://en.wikipedia.org/wiki/Credit_card_numbers

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

Ответ 3

Схема префикса карты подробно описана в списках BIN (номер банковского идентификатора) и регулярно менялась, я бы посоветовал не проверять полные 1-й 6-значный номер PAN, если вы не планируете регулярные обновления и выполняете беглую проверку первой пары цифр (ваши отсутствующие 48 * для визы/электората, например, длина визы может составлять 16-19).

Если вы находитесь в Великобритании; http://www.barclaycard.co.uk/business/documents/pdfs/bin_rules.pdf

Ответ 4

Здесь плагин jQuery, предназначенный именно для этого:

http://jquerycreditcardvalidator.com/

См. также этот ответ StackOverflow для отличного обсуждения того, как номера кредитных карт относятся к типам карт:

fooobar.com/info/15458/...