2010-03-23 18 views
140

I vari servizi online hanno valori diversi per l'anno di massima scadenza, quando si tratta di carte di credito.Anno massimo per la data di scadenza della carta di credito

Per esempio:

  • Basecamp: +15 anni (2025)
  • Amazon: +20 anni (2030)
  • Paypal: +19 anni (2029)

Cosa è il massimo ragionevole qui? Ci sono delle linee guida ufficiali?

+1

L'incongruenza tra i principali negozi online punta decisamente verso nessuna linea guida ufficiale. –

+9

Amo i siti che richiedono l'anno di scadenza con un semplice input di testo ... – Quentin

+1

@Quentin è meglio della convalida errata che impedisce l'invio, a meno che l'utente non sappia come utilizzare il dev del browser web. utensili. – Alastair

risposta

58

Non ci sono linee guida ufficiali in quanto gli emittenti delle carte di credito possono scegliere ciascuna quando scadono le carte che emettono. In realtà hanno emesso carte per periodi sempre più lunghi. Se stai cercando di determinare quanto lontano nel futuro dovresti tenere conto delle date di scadenza, fallo sul sicuro e dai ai tuoi clienti molti anni tra cui scegliere. In questo modo, a prova di futuro, la tua applicazione.

FYI, molti emittenti di carte di credito non utilizzano la data di scadenza per determinare se approvare o meno un acquisto con carta di credito. Quindi, se sei preoccupato che venga fornita una data errata, il processore avrà l'ultima parola sul fatto che la transazione sia approvata o meno, quindi non me ne preoccuperei.

luglio 2017: Solo un utente finale con una carta scaduta da quasi 50 anni.

+1

Possono approvare senza un codice corretto, ma possono anche addebitare tariffe più alte sulle transazioni che non hanno codici corretti. – BVernon

+0

Questo vale solo per la verifica AVS e CVV. –

+0

È vero che la maggior parte degli emittenti approverebbe comunque la transazione, TUTTAVIA non fornire all'utente l'opzione per l'anno sulla sua carta potrebbe scoraggiarlo ad andare avanti con la transazione. Aggiungo solo 50 anni e aspetto che nessun emittente intenda che tu tenga un pezzo di plastica per così tanto tempo, anche se questo è un lungo e un po 'fastidioso. – Mauro

16

Aggiungo dinamicamente + 15-20 anni all'anno della data corrente OPPURE fornisco un input da casella di testo per l'anno (che personalmente trovo più veloce per digitare le due cifre in che per scorrere un elenco di anni).

+7

a meno che tu non stia usando un telefono cellulare, forse. potresti preferire lo scorrere degli anni. qualcosa da considerare. – jedmao

+10

Buon punto @sfjedi, e non dimentichiamo che nella maggior parte dei browser è ancora possibile digitare il numero e verrà selezionato automaticamente. –

+1

Buon punto sull'input del testo vs select. Ho sempre preferito l'input di testo, ma ultimamente con alcuni dei miei test dell'interfaccia utente su Android e iOS, ho scoperto che le opzioni di selezione sembrano leggermente più semplici. Tuttavia, l'utilizzo del tipo = numero di HTML5 estrae rapidamente la tastiera numerica sui dispositivi mobili, rendendo così anche le cose facili. Pensa che si tratta di errori di validazione; probabilmente meno errori con le opzioni di selezione predefinite. –

5

Come limite teorico superiore, propongo che non è necessario prendere in considerazione più della durata prevista del titolare della carta. Wikipedia fa in loro standard editoriali per biographies of living persons:

Ogni individuo nato meno di 115 anni fa, è coperta da questa politica a meno che una fonte affidabile ha confermato la morte di un individuo. Le persone di età superiore a 115 anni sono presunte morte a meno che non siano elencate alle persone più anziane.

Quindi, nel codice, cercare l'anno corrente, aggiungere 115 e utilizzarlo come limite teorico superiore alla data di scadenza della carta di credito. Non dovrai mai più toccare quel codice.

+2

Direi che è molto teorico.Qualcuno con una carta così vecchia sarebbe stato rilasciato a un certo punto tra il loro primo compleanno e il giorno in cui erano nati. E poi avrebbero dovuto vivere fino a 115 anni! – jimp

+33

Un ragazzo che è un po 'roba forte, sei un ragazzo che sta fumando! – Art

+7

** SWIM ** ha pensato che fosse una buona idea (al momento) analizzare la lista di persone più anziane di Wikipedia per limitare il campo di input dell'età a quel 'max' nel caso in cui la persona più anziana abbia usato il modulo una volta compiuti i 116. .: [ – Alastair

-1

Dopo aver letto la validità superiore del PO di 20 anni per Amazon, ho scritto questa semplice soluzione in 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> 

Questo ha notevolmente ridotto il numero di queste richieste new-year per rimuovere last year da un modulo.

Una versione più snella del ciclo corre ~ due volte più velocemente:

<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

Ti rendi conto che chiamare 'date ('Y')' e 'date ('y')' 20 volte ciascuno è piuttosto lento? –

+0

Relativamente non, @Alexis ma ho aggiunto una versione che viene eseguita due volte più velocemente per te. : P – Alastair

1

Buona chiamata, @Alistair.

Ecco la generazione del mese e dell'anno in ASP.NET MVC.Aggiungi questo al vostro 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)); 
    } 
} 

E questo alla vostra vista:

<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
<?php 
$y = gmdate("Y"); 
$x = 20; 
$max = ($y + $x); 
while ($y <= $max) { 
echo "<option value='$y'>$y</option>"; 
$y = $y + 1; 
} 
?> 
+1

Solo una variazione sopra menzionata, meglio aggiungere gli anni per selezionare e creare elenchi a discesa per le selezioni del mese e dell'anno. Gli utenti tendono a inserire variazioni di mese e anno in modo diverso se vengono presentate con un solo campo di testo. –

0

Se si desidera una soluzione che non cede anni a tre cifre 2100+ è necessario modulo il data, di conseguenza è necessario riempire con zero iniziale per xx00-xx09 anni per non ottenere anni a cifra singola.

questo sarà molto importante partire in 2080.

<?php 
    for($i=0;$i<=20;$i++){ 
     $aktDate = sprintf("%02d", ((date('y')+$i)%100)); 
     echo "<option value=\"{$aktDate}\">{$aktDate}</option>\n"; 
    } 
?> 
0

Qui è un codice snippet JavaScript è possibile utilizzare per visualizzare un elenco personalizzabile dei prossimi anni per la convalida 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

Mentre il secondo esempio viene eseguito due volte più rapidamente del primo si ottiene ancora la data e l'estrazione l'anno da esso 20 volte anziché 40 volte. Una migliore svolgimento del ciclo è:

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

che saranno circa 20 volte più veloce rispetto alla esempio due volte più veloce e affronta anche un piccolo bug nel codice originale che l'anno potrebbe cambiare da un recupero della data di al successivo che porta a risultati inattesi, anche se in questo caso innocui.

-2
<script type="text/javascript"> 
    var select = $(".card-expiry-year"), 
    year = new Date().getFullYear(); 

    for (var i = 0; i < 20; i++) { 
     select.append($("<option value='"+(i + year)+"' "+(i === 0 ? "selected" : "")+">"+(i + year)+"</option>")) 
    } 
</script> 
Problemi correlati