Maximales Verfallsjahr der Kreditkarte

149

Verschiedene Online-Dienste haben unterschiedliche Werte für das maximale Ablaufjahr, wenn es um Kreditkarten geht.

Zum Beispiel:

  • Basislager: +15 Jahre (2025)
  • Amazon: +20 Jahre (2030)
  • Paypal: +19 Jahre (2029)

Was ist hier das vernünftige Maximum? Gibt es offizielle Richtlinien?

Kunst
quelle
1
Die Inkonsistenz zwischen den großen Online-Shops deutet ziemlich stark auf keine offizielle Richtlinie hin.
Matt Ball
10
Ich liebe Websites, die mit einer einfachen Texteingabe nach dem Ablaufjahr fragen…
Quentin
1
@ Quentin Es ist besser als eine fehlerhafte Validierung, die die Übermittlung verhindert, es sei denn, der Benutzer weiß, wie man den Entwickler des Webbrowsers verwendet. Werkzeuge.
Alastair
4
@Alastair - Mein Kommentar war nicht sarkastisch gedacht.
Quentin
1
@ Quention Fair genug. Die Ellipse warf mich. :-P Für einen Benutzer ist dies eindeutig die am wenigsten ärgerliche Implementierung, aber aus Sicht der Entwicklung / des Geschäfts würde es einfach so viele fehlerhafte Eingaben geben (und das könnte zu Umsatzverlusten führen).
Alastair

Antworten:

65

Es gibt keine offizielle Richtlinie, da die Kreditkartenaussteller jeweils auswählen können, wann die von ihnen ausgestellten Karten ablaufen. Tatsächlich geben sie Karten für immer längere Zeiträume aus. Wenn Sie herausfinden möchten, wie weit in die Zukunft hinaus Sie Ablaufdaten berücksichtigen sollten, gehen Sie auf Nummer sicher und geben Sie Ihren Kunden viele Jahre Zeit zur Auswahl. Auf diese Weise können Sie Ihre Bewerbung zukunftssicher machen.

Zu Ihrer Information, viele Kreditkartenunternehmen verwenden das Ablaufdatum nicht, um zu bestimmen, ob ein Kreditkartenkauf genehmigt werden soll oder nicht. Wenn Sie also befürchten, dass ein falsches Datum angegeben wird, hat der Prozessor letztendlich das letzte Wort darüber, ob die Transaktion genehmigt wird oder nicht, sodass ich mir darüber keine Sorgen machen würde.

Juli 2017 : Hatte gerade einen Endbenutzer mit einer Karte, die in fast 50 Jahren abgelaufen ist.

John Conde
quelle
2
Sie genehmigen möglicherweise ohne einen korrekten Code, berechnen Ihnen jedoch möglicherweise auch höhere Sätze für Ihre Transaktionen, für die keine korrekten Codes vorhanden sind.
BVernon
Dies gilt nur für die AVS- und CVV-Überprüfung.
John Conde
Es ist wahr, dass die meisten Emittenten die Transaktion ohnehin genehmigen würden. Wenn Sie dem Benutzer jedoch nicht die Option für das Jahr auf seiner Karte zur Verfügung stellen, könnte dies ihn davon abhalten, mit der Transaktion fortzufahren. Ich würde nur 50 Jahre hinzufügen und erwarten, dass kein Emittent beabsichtigt, dass Sie ein Stück Plastik so lange aufbewahren, selbst wenn dies ein langer und etwas nerviger Dropdown ist.
Mauro
16

Ich würde entweder dynamisch + 15-20 Jahre zum Jahr des aktuellen Datums hinzufügen oder eine Textfeldeingabe für das Jahr bereitstellen (was ich persönlich schneller finde, wenn ich die beiden Ziffern eingebe, als durch eine Liste von Jahren zu scrollen).

Bryan Denny
quelle
7
es sei denn, Sie verwenden ein Mobiltelefon. Vielleicht möchten Sie lieber durch die Jahre wischen. etwas zu beachten.
jedmao
10
Guter Punkt @sfjedi, und vergessen wir nicht, dass Sie in den meisten Browsern immer noch die Nummer eingeben können und diese automatisch ausgewählt wird.
Kevin Wiskia
1
Guter Punkt über Texteingabe vs Auswahl. Ich habe die Texteingabe immer bevorzugt, aber in letzter Zeit habe ich bei einigen meiner UI-Tests unter Android und iOS festgestellt, dass die Auswahloptionen etwas einfacher zu sein scheinen. Wenn Sie jedoch HTML5s Typ = Nummer verwenden, wird die Zifferntastatur auf Mobilgeräten schnell aufgerufen, sodass dies ebenfalls einfach ist. Es geht um Validierungsfehler. wahrscheinlich weniger Fehler mit vordefinierten Auswahloptionen.
Clint Pachl
Ich bin mir nicht sicher, ob dies auf einem mobilen Gerät gut funktionieren würde, aber was ist mit einem Dropdown / Textfeld? Sie können entweder einen Wert eingeben oder einen wie gewohnt auswählen.
Der Muffin-Mann
4

Als theoretische Obergrenze schlage ich vor, dass Sie nicht mehr als die erwartete Lebensdauer des Karteninhabers berücksichtigen müssen. Wikipedia tut dies in ihren redaktionellen Standards für Biografien lebender Personen :

Personen, die vor weniger als 115 Jahren geboren wurden, fallen unter diese Richtlinie, es sei denn, eine zuverlässige Quelle hat den Tod der Person bestätigt. Personen über 115 Jahre gelten als tot, sofern sie nicht bei den ältesten Personen aufgeführt sind.

Suchen Sie in Ihrem Code nach dem aktuellen Jahr, fügen Sie 115 hinzu und verwenden Sie dies als theoretische Obergrenze für das Ablaufdatum der Kreditkarte. Sie müssen diesen Code nie wieder berühren.

MetaEd
quelle
2
Ich würde sagen, das ist sehr theoretisch. Jemand mit einer so alten Karte hätte sie irgendwann zwischen ihrem ersten Geburtstag und dem Tag ihrer Geburt erhalten. Und dann müssten sie 115 Jahre alt werden!
Jimp
40
Junge, das sind starke Sachen, die ihr raucht!
Art
7
SWIM hielt es (zu dieser Zeit) für eine gute Idee, die Liste der ältesten Personen von Wikipedia zu analysieren, um das Eingabefeld für das Alter darauf zu beschränken, maxnur für den Fall, dass die älteste Person das Formular nach ihrem 116. Lebensjahr verwendete ...: [
Alastair
Was ist mit einer Unternehmenskarte, die nicht unbedingt an eine Person gebunden ist? In diesem Fall gibt es keine "theoretische" Grenze.
Aaronbauman
3
Aber @aaronbauman, laut dem Obersten Gerichtshof der USA, ist ein Unternehmen eine Person. Die Karte darf also nur 115 Jahre haltbar sein! :-)
Stonetip
1

Hier ist ein Javascript-Code-Snippet, mit dem Sie eine anpassbare Liste der kommenden Jahre für die CC-Validierung anzeigen können:

    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>

abd3721
quelle
0

Hier eine Auswahl der besten US-Online-Händler:

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
Tom Howard
quelle
-1

Guter Anruf, @Alistair.

Hier ist die Monats- und Jahresgenerierung in ASP.NET MVC. Fügen Sie dies Ihrem Ansichtsmodell hinzu:

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));
    }
}

Und das aus Ihrer Sicht:

<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>
Rap
quelle
-1

Während das zweite Beispiel doppelt so schnell ausgeführt wird wie das erste, erhalten Sie immer noch das Datum und extrahieren das Jahr 20 Mal anstatt 40 Mal daraus. Ein besseres Abrollen der Schleife ist:

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

Dies ist ungefähr 20-mal schneller als das doppelt so schnelle Beispiel und behebt auch einen kleinen Fehler im Originalcode, da sich das Jahr von einem Abrufen des Datums zum nächsten ändern kann, was zu unerwarteten, in diesem Fall harmlosen Ergebnissen führt.

user3347790
quelle
-2
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
Louis Ferreira
quelle
1
Nur eine Variation der oben genannten, besser die Jahre hinzufügen, um auszuwählen und Dropdowns für die Monats- und Jahresauswahl zu machen. Benutzer neigen dazu, Monats- und Jahresvariationen unterschiedlich einzugeben, wenn sie nur mit einem einzigen Textfeld dargestellt werden.
Louis Ferreira
-2

Wenn Sie eine Lösung suchen, die keine dreistelligen Jahre 2100+ ergibt, müssen Sie das Datum modulieren. Dementsprechend müssen Sie xx00-xx09 Jahre mit der führenden Null füllen, um keine einstelligen Jahre zu erhalten.

Dies wird ab 2080 sehr wichtig sein.

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

Nachdem ich die obere Gültigkeit des OP von 20 Jahren für Amazon gelesen hatte, schrieb ich diese einfache Lösung 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>

Dies hat die Anzahl dieser Neujahrsanfragen zum Entfernen last yearaus einem Formular erheblich reduziert .

Eine schlankere Version der Schleife läuft ~ doppelt so schnell:

<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>
Alastair
quelle
4
Ist dir klar, dass das Anrufen date('Y')und jeweils date('y')20 Mal ziemlich langsam ist?
Alexis Wilke
Relativ nicht, @Alexis, aber ich habe eine Version hinzugefügt, die für Sie doppelt so schnell läuft. : 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> 
Rollox
quelle