155 votes

Année maximum dans la date d'expiration de la carte de crédit

Les différents services en ligne proposent des valeurs différentes pour l'année d'expiration maximale, lorsqu'il s'agit de cartes de crédit.

Par exemple :

  • Basecamp : +15 ans (2025)
  • Amazone : +20 ans (2030)
  • Paypal : +19 ans (2029)

Quel est le maximum raisonnable ici ? Existe-t-il des directives officielles ?

1 votes

L'incohérence entre les principaux magasins en ligne indique clairement qu'il n'existe pas de directive officielle.

10 votes

J'adore les sites qui demandent l'année d'expiration par une simple saisie de texte

2 votes

@Quentin c'est mieux qu'une validation défectueuse qui empêche la soumission, à moins que l'utilisateur sache comment utiliser les outils de développement du navigateur web.

73voto

John Conde Points 102874

Il n'existe pas de directive officielle, les émetteurs de cartes de crédit pouvant choisir la date d'expiration des cartes qu'ils émettent. En fait, ils émettent des cartes pour des périodes de plus en plus longues. Si vous essayez de déterminer jusqu'à quand vous devez prévoir des dates d'expiration, choisissez le côté le plus sûr et donnez à vos clients le choix entre plusieurs années. De cette façon, votre application est à l'épreuve du temps.

Pour votre information, de nombreux émetteurs de cartes de crédit n'utilisent pas la date d'expiration pour déterminer s'ils approuvent ou non un achat par carte de crédit. Par conséquent, si vous craignez qu'une date incorrecte soit fournie, c'est le processeur qui aura le dernier mot sur l'approbation ou non de la transaction, donc je ne m'en préoccuperais pas.

Juillet 2017 : Je viens d'avoir un utilisateur final avec une carte qui expire dans presque 50 ans.

2 votes

Ils peuvent approuver une transaction sans code correct, mais ils peuvent aussi vous facturer des taux plus élevés sur les transactions dont le code n'est pas correct.

0 votes

C'est uniquement vrai pour la vérification AVS et CVV.

0 votes

Il est vrai que la plupart des émetteurs approuveraient de toute façon la transaction, MAIS le fait de ne pas offrir à l'utilisateur l'option de l'année sur sa carte pourrait le décourager de poursuivre la transaction. J'ajouterais simplement 50 ans et je m'attendrais à ce qu'aucun émetteur n'ait l'intention de conserver un morceau de plastique aussi longtemps, même si la liste déroulante est longue et un peu ennuyeuse.

16voto

Bryan Denny Points 12910

Je pourrais soit ajouter dynamiquement +15-20 ans à l'année de la date actuelle, soit fournir une zone de saisie pour l'année (personnellement, je trouve plus rapide de taper les deux chiffres que de faire défiler une liste d'années).

7 votes

À moins que vous n'utilisiez un téléphone portable, peut-être. vous pourriez préférer passer d'une année à l'autre. c'est une chose à considérer.

10 votes

Bon point @sfjedi, et n'oublions pas que dans la plupart des navigateurs, vous pouvez toujours taper le numéro et la sélection se fera automatiquement.

1 votes

Bonne remarque sur la saisie de texte par rapport à la sélection. J'ai toujours préféré la saisie de texte, mais dernièrement, lors de certains de mes tests d'interface utilisateur sur Android et iOS, j'ai trouvé que les options de sélection semblaient légèrement plus faciles. Cependant, l'utilisation du type=number de HTML5 fait rapidement apparaître le clavier numérique sur les appareils mobiles, ce qui facilite également les choses. Je pense que tout se résume aux erreurs de validation ; il y a probablement moins d'erreurs avec les options de sélection prédéfinies.

4voto

MετάEd Points 1838

Comme limite supérieure théorique, je propose que vous n'ayez pas besoin de prendre en compte plus que la durée de vie prévue du titulaire de la carte. Wikipedia le fait dans ses normes éditoriales pour biographies de personnes vivantes :

Tout individu né il y a moins de 115 ans est couvert par cette police, à moins qu'une source fiable n'ait confirmé le décès de l'individu. Les personnes âgées de plus de 115 ans sont présumées décédées, sauf si elles figurent dans la liste des personnes les plus âgées.

Ainsi, dans votre code, recherchez l'année en cours, ajoutez 115, et utilisez ce chiffre comme limite supérieure théorique de la date d'expiration de la carte de crédit. Vous n'aurez plus jamais à toucher à ce code.

2 votes

Je dirais que c'est très théorique. Une personne possédant une carte aussi ancienne l'aurait obtenue entre son premier anniversaire et le jour de sa naissance. Et il aurait fallu qu'elle vive jusqu'à 115 ans !

41 votes

C'est du solide que vous fumez, les gars !

7 votes

SWIM J'ai pensé que c'était une bonne idée (à l'époque) d'analyser la liste des personnes les plus âgées de Wikipedia pour restreindre le champ de saisie de l'âge à cette liste. max juste au cas où la personne la plus âgée utiliserait le formulaire après avoir eu 116 ans... :[

0voto

Rap Points 3307

Bien vu, @Alistair.

Voici la génération du mois et de l'année en ASP.NET MVC. Ajoutez ceci à votre viewmodel :

public IList<SelectListItem> Months = new List<SelectListItem>() { 
    new SelectListItem() { Text="Jan", Value="01" },
    new SelectListItem() { Text="Feb", Value="02" },
    new SelectListItem() { Text="Mar", Value="03" },
    new SelectListItem() { Text="Apr", Value="04" },
    new SelectListItem() { Text="May", Value="05" },
    new SelectListItem() { Text="Jun", Value="06" },
    new SelectListItem() { Text="Jul", Value="07" },
    new SelectListItem() { Text="Aug", Value="08" },
    new SelectListItem() { Text="Sep", Value="09" },
    new SelectListItem() { Text="Oct", Value="10" },
    new SelectListItem() { Text="Nov", Value="11" },
    new SelectListItem() { Text="Dec", Value="12" },
};
public IEnumerable<SelectListItem> Years
{
    get
    {
        return new SelectList(Enumerable.Range(DateTime.Today.Year, 15));
    }
}

Et ceci à votre vue :

<fieldset>
    <legend>Card expiration</legend>
    <div style="float: left;">
        <div class="editor-label">
            @Html.LabelFor(model => model.ExpirationMonth)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.ExpirationMonth, Model.Months)
            @Html.ValidationMessageFor(model => model.ExpirationMonth)
        </div>
    </div>
    <div style="float: left;">

        <div class="editor-label">
            @Html.LabelFor(model => model.ExpirationYear)
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.ExpirationYear, Model.Years)
            @Html.ValidationMessageFor(model => model.ExpirationYear)
        </div>
    </div>
</fieldset>

-3voto

Alastair Points 1492

Après avoir lu la validité supérieure de l'OP de 20 ans pour Amazon, j'ai écrit cette solution simple en PHP :

<select name='Expiry-Year'>
    <option value="">yy</option>
    <?php
    for($i=0;$i<21;$i++){
        echo "<option value='".(date('Y')+$i)."'>".(date('y')+$i)."</option>\n";
    }
    ?>
</select>

Cela a permis de réduire considérablement le nombre de ces demandes de suppression en début d'année. last year à partir d'un formulaire.

Une version allégée de la boucle fonctionne deux fois plus vite :

<select name='Expiry-Year'>
    <option value="">yy</option>
    <?php
    for($i=date('Y');$i<date('Y')+21;$i++){
        echo "<option value='".$i."'>".substr($i,2)."</option>\n";
    }
    ?>
</select>

4 votes

Vous réalisez qu'appeler date('Y') y date('y') 20 fois chacun, c'est plutôt lent ?

0 votes

Relativement non, @Alexis mais j'ai ajouté une version qui tourne deux fois plus vite pour vous :P

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