Anno massimo alla data di scadenza della carta di credito


149

Vari servizi online hanno valori diversi per l'anno di scadenza massimo, quando si tratta di carte di credito.

Per esempio:

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

Qual è il massimo ragionevole qui? Ci sono linee guida ufficiali?


1
L'incoerenza tra i principali negozi online punta piuttosto fortemente verso nessuna linea guida ufficiale.
Matt Ball,

10
Adoro 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,

4
@Alastair - Il mio commento non era inteso sarcasticamente.
Quentin,

1
@Quention Abbastanza giusto. I puntini di sospensione mi hanno lanciato. :-P Per un utente, questa è chiaramente l'implementazione meno fastidiosa, ma dal punto di vista dello sviluppo / delle imprese, ci sarebbero solo tanti input errati (e ciò potrebbe causare la perdita di vendite).
Alastair,

Risposte:


65

Non esiste una linea guida ufficiale in quanto gli emittenti delle carte di credito possono scegliere ciascuno alla scadenza delle carte emesse. In effetti hanno emesso carte per periodi sempre più lunghi. Se stai cercando di determinare fino a che punto nel futuro dovresti rispettare le date di scadenza, vai sul sicuro e dai ai tuoi clienti molti anni tra cui scegliere. In questo modo la tua domanda sarà a prova di futuro.

Cordiali saluti, 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 per una data errata, il processore alla fine avrà l'ultima parola sull'approvazione o meno della transazione, quindi non me ne preoccuperei.

Luglio 2017 : ho appena avuto un utente finale con una carta scaduta da quasi 50 anni.


2
Possono approvare senza un codice corretto, ma possono anche addebitare tariffe più elevate sulle transazioni che non dispongono di codici corretti.
BVernon,

Questo è vero solo per la verifica AVS e CVV.
John Conde,

È vero che la maggior parte degli emittenti approverebbe comunque la transazione, TUTTAVIA non fornendo all'utente l'opzione per l'anno sulla sua carta potrebbe scoraggiarlo a proseguire la transazione. Aggiungerei solo 50 anni e mi aspetto che nessun emittente intenda mantenere un pezzo di plastica per così tanto tempo, anche se si tratta di un lungo e un po 'fastidioso menu a discesa.
Mauro,

16

Vorrei aggiungere dinamicamente + 15-20 anni all'anno della data corrente O fornire un input di casella di testo per l'anno (che personalmente trovo più veloce nel digitare le due cifre piuttosto che scorrere un elenco di anni).


7
a meno che tu non stia utilizzando un telefono cellulare, forse. potresti preferire scorrere negli anni. qualcosa da considerare.
jedmao,

10
Buon punto @sfjedi, e non dimentichiamo che nella maggior parte dei browser è ancora possibile digitare il numero e si selezionerà automaticamente.
Kevin Wiskia,

1
Un buon punto sull'inserimento del testo e sulla selezione. Ho sempre preferito l'inserimento di testo, ma ultimamente con alcuni dei miei test dell'interfaccia utente su Android e iOS, ho scoperto che selezionare le opzioni sembra leggermente più semplice. Tuttavia, l'utilizzo di HTML = type = number consente di recuperare rapidamente la tastiera numerica sui dispositivi mobili, in modo da semplificare anche le cose. Pensa che dipenda da errori di validazione; probabilmente meno errori con opzioni di selezione predefinite.
Clint Pachl,

Non sono sicuro che funzionerebbe bene su un dispositivo mobile, ma che dire di un menu a discesa / casella di testo? Puoi inserire un valore o sceglierne uno come di consueto.
The Muffin Man

4

Come limite superiore teorico, propongo di non considerare più della durata prevista del titolare della carta. Wikipedia lo fa nei loro standard editoriali per le biografie di persone viventi :

Qualsiasi individuo nato meno di 115 anni fa è coperto da questa politica a meno che una fonte affidabile non abbia confermato la morte dell'individuo. Si presume che le persone di età superiore ai 115 anni siano morte se non sono elencate nelle persone più anziane.

Quindi, nel tuo codice, cerca l'anno in corso, aggiungi 115 e usalo come limite superiore teorico 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 tra il loro primo compleanno e il giorno in cui sono nati. E poi avrebbero dovuto vivere fino a 115 anni!
jimp

40
Ragazzi, queste sono cose forti che state fumando!
Art

7
SWIM ha pensato che fosse una buona idea (al momento) analizzare l'elenco delle persone più anziane di Wikipedia per limitare il campo di immissione dell'età a quello maxnel caso in cui la persona più anziana avesse usato il modulo una volta compiuti 116 ...: [
Alastair

Che dire di una carta aziendale che non è necessariamente legata a un individuo? In tal caso, non esiste un limite "teorico".
aaronbauman,

3
Ma @aaronbauman, secondo la Corte Suprema degli Stati Uniti, una società è una persona. Quindi la carta deve essere valida solo per 115 anni! :-)
Stonetip

1

Ecco uno snippet di codice Javascript che puoi 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>


0

Ecco un esempio dei migliori rivenditori online statunitensi:

RETAILER        WINDOW IN YEARS
Amazon          20
Walmart         10
Apple           NA (TEXT FIELD)
Home Depot      19
Best Buy        10
Target          NA (TEXT FIELD)
eBay            NA (TEXT FIELD)
Google          19

-1

Buona chiamata, @Alistair.

Ecco la generazione del mese e dell'anno in ASP.NET MVC. Aggiungi questo al tuo modello di visualizzazione:

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 a tuo avviso:

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

-1

Mentre il secondo esempio viene eseguito due volte più rapidamente del primo, stai ancora ottenendo la data ed estraendo l'anno da essa 20 volte anziché 40 volte. Un migliore srotolamento del loop è:

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

Sarà circa 20 volte più veloce dell'esempio due volte più veloce e risolve anche un bug minore nel codice originale in quanto l'anno potrebbe cambiare da un recupero della data al successivo portando a risultati imprevisti, anche se in questo caso innocui.


-2
<?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 di cui sopra, meglio aggiungere gli anni per selezionare ed effettuare gli elenchi a discesa per le selezioni di mese e anno. Gli utenti tendono a inserire le variazioni di mese e anno in modo diverso se si presentano solo un campo di testo.
Louis Ferreira,

-2

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

Questo sarà molto importante a partire dal 2080.

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

-3

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>

Ciò ha notevolmente ridotto il numero di queste richieste del nuovo anno da rimuovere last yearda un modulo.

Una versione più snella del loop viene eseguita ~ due volte più rapidamente:

<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?
Alexis Wilke,

Relativamente no, @Alexis ma ho aggiunto una versione che gira due volte più velocemente per te. : P
Alastair

-6
<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> 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.