67 votes

Déterminer le type de carte de crédit par son numéro ?

Le type de carte de crédit peut-il être déterminé uniquement à partir du numéro de la carte de crédit ?

Est-ce recommandé ou faut-il toujours demander au client le type de carte de crédit qu'il utilise ?

J'ai fait une recherche sur Internet et j'ai trouvé cet algorithme : http://cuinl.tripod.com/Tips/o-1.htm Est-ce que c'est fiable ?

Merci

32voto

Alex Points 17262

Oui, le site que vous avez mentionné est correct. De nombreux sites, dont Google Checkout je crois, s'appuient sur la détection automatique du type de carte. C'est pratique, l'interface utilisateur est moins encombrée (un champ de saisie en moins) et cela fait gagner du temps. Allez-y !

21voto

Lou Franco Points 48823

J'ai entendu une bonne raison de les faire choisir (même si vous pouvez le faire). Pour qu'ils connaissent la liste des cartes de crédit que vous acceptez.

11voto

Nosredna Points 33670

En tant que consommateur, je déteste choisir une carte en premier lieu. Je veux juste commencer à taper le numéro.

Cette question est abordée dans l'ouvrage de Wroblewski Conception de formulaires Web aux pages 153-154. C'est dans la section "Supprimer les questions" du chapitre "Entrées inutiles". L'exemple donné est celui de Paypal, qui met en évidence le type de carte lorsque vous avez tapé votre numéro.

7voto

AaronLS Points 12720

Je suis à peu près certain qu'au moins pour MasterCard, Visa, Discover et American Express, c'est exact. Je n'ai jamais travaillé avec les autres.

Voir tout en bas de cette page : http://www.merchantplus.com/resources/pages/credit-card-logos-and-test-numbers/

Ceci pourrait aussi vous être utile" http://www.beachnet.com/~hstiles/cardtype.html

C'est assez intéressant : http://en.wikipedia.org/wiki/Bank%5Fcard%5Fnumber

5voto

Niko Points 2289

Voici le script que j'utilise et qui fonctionne avec les gammes de cartes actuelles. il effectue également un contrôle de validité sur le numéro.

/**
* 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;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X