web-dev-qa-db-fra.com

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

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

Par exemple:

  • Camp de base: +15 ans (2025)
  • Amazon: +20 ans (2030)
  • Paypal: +19 ans (2029)

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

145
Art

Il n'y a pas de ligne directrice officielle, car les émetteurs de cartes de crédit peuvent choisir chaque 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 la distance qui vous sépare, vous devez vous adapter aux dates d'expiration, privilégiez la sécurité et donnez à vos clients de nombreuses années au choix. De cette façon, vous testez votre application dans le futur.

Pour votre information, de nombreux émetteurs de cartes de crédit n'utilisent pas la date d'expiration pour décider d'approuver ou non un achat par carte de crédit. Donc, si vous craignez une date incorrecte, le responsable du traitement aura finalement le dernier mot sur le fait que la transaction soit approuvée ou non.

Juillet 2017 : Je viens d'avoir un utilisateur final avec une carte qui a expiré près de 50 ans à partir de maintenant. 

62
John Conde

Je voudrais soit ajouter dynamiquement + 15-20 ans à l'année de la date en cours OR pour saisir une zone de texte pour l'année (personnellement, je trouve qu'il est plus rapide de taper les deux chiffres que de faire défiler une liste d'années).

16
Bryan Denny

En tant que limite supérieure théorique, je propose de ne pas prendre en compte plus que la durée de vie attendue du détenteur de la carte. Wikipedia le fait dans leurs normes éditoriales pour les biographies de personnes vivantes :

Toute personne née il y a moins de 115 ans est couverte par cette police sauf si une source fiable a confirmé le décès de cette personne. Les personnes de plus de 115 ans sont présumées mortes sauf si elles sont répertoriées chez les personnes les plus âgées.

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

4
MetaEd

Voici un extrait de code Javascript que vous pouvez utiliser pour afficher une liste personnalisable des années à venir pour la validation CC:

    var yearsToShow = 20;
    var thisYear = (new Date()).getFullYear();
    for (var y = thisYear; y < thisYear + yearsToShow; y++) {
      var yearOption = document.createElement("option");
      yearOption.value = y;
      yearOption.text = y;
      document.getElementById("expYear").appendChild(yearOption);
    }
          <label for="expiration">Expiration Date</label>
          <span id="expiration">
            <select id="expMonth" name="expMonth">
              <option disabled="true">Month</option>
              <option value="1">Jan</option>
              <option value="2">Feb</option>
              <option value="3">Mar</option>
              <option value="4">Apr</option>
              <option value="5">May</option>
              <option value="6">Jun</option>
              <option value="7">Jul</option>
              <option value="8">Aug</option>
              <option value="9">Sep</option>
              <option value="10">Oct</option>
              <option value="11">Nov</option>
              <option value="12">Dec</option>
            </select>
            <select id="expYear" name="expYear">
            </select>
          </span>

1
abd3721

Bien que le deuxième exemple soit deux fois plus rapide que le premier, vous obtenez toujours la date et en extrayez l’année 20 fois au lieu de 40. Un meilleur déroulement de la boucle est:

$StartDate=date('Y');
$EndDate=$StartDate+21;
for($i=$StartDate;$i<$EndDate;$i++){
    echo "<option value='".$i."'>".substr($i,2)."</option>\n";

Ce sera environ 20 fois plus rapide que l'exemple deux fois plus rapide et corrigera également un bogue mineur du code d'origine, en ce sens que l'année pourrait changer d'une extraction à une autre, entraînant des résultats inattendus mais inoffensifs.

0
user3347790

Bon appel, @Alistair. 

Voici la génération des mois et des années dans ASP.NET MVC. Ajoutez ceci à votre modèle de vue:

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 avis:

<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>
0
Rap