Maksymalny rok ważności karty kredytowej

149

Różne usługi online mają różne wartości maksymalnego roku wygaśnięcia, jeśli chodzi o karty kredytowe.

Na przykład:

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

Jakie jest tutaj rozsądne maksimum? Czy są jakieś oficjalne wytyczne?

Sztuka
źródło
1
Niespójność występująca w głównych sklepach internetowych dość mocno wskazuje na brak oficjalnych wytycznych.
Matt Ball
10
Uwielbiam witryny, które proszą o wskazanie roku wygaśnięcia za pomocą prostego wprowadzenia tekstu…
Quentin
1
@Quentin to lepsze niż wadliwa walidacja, która uniemożliwia przesłanie, chyba że użytkownik wie, jak korzystać z dev przeglądarki internetowej. przybory.
Alastair
4
@Alastair - Mój komentarz nie był sarkastyczny.
Quentin
1
@Quention Wystarczająco uczciwe. Wielokropek mnie rzucił. :-P Dla użytkownika to najwyraźniej najmniej irytujące wdrożenie, ale z punktu widzenia rozwoju / biznesu byłoby po prostu tyle błędnych danych wejściowych (co mogłoby spowodować utratę sprzedaży).
Alastair

Odpowiedzi:

65

Nie ma oficjalnych wytycznych, ponieważ wydawcy kart kredytowych mogą wybrać każdą z nich, kiedy wydane przez nich karty wygaśnie. W rzeczywistości wydawali karty przez coraz dłuższe okresy. Jeśli próbujesz określić, jak daleko w przyszłość powinieneś uwzględnić daty wygaśnięcia, zachowaj bezpieczeństwo i daj swoim klientom wiele lat do wyboru. W ten sposób zabezpieczasz swoją aplikację w przyszłości.

Do Twojej wiadomości, wielu wydawców kart kredytowych nie korzysta z daty ważności przy podejmowaniu decyzji o zatwierdzeniu zakupu karty kredytowej. Więc jeśli martwisz się, że podana zostanie nieprawidłowa data, procesor ostatecznie będzie miał ostatnie słowo w sprawie tego, czy transakcja zostanie zatwierdzona, czy nie, więc nie martwiłbym się tym.

Lipiec 2017 : Właśnie miałem użytkownika końcowego z kartą, która wygasła prawie 50 lat od teraz.

John Conde
źródło
2
Mogą zatwierdzić bez poprawnego kodu, ale mogą również naliczyć wyższe stawki za transakcje, które nie mają poprawnych kodów.
BVernon
Dotyczy to tylko weryfikacji AVS i CVV.
John Conde,
Prawdą jest, że większość wydawców i tak zgodziłaby się na transakcję, JEDNAKŻE brak udostępnienia użytkownikowi opcji na rok na karcie może zniechęcić go do kontynuowania transakcji. Dodałbym tylko 50 lat i spodziewam się, że żaden emitent nie będzie chciał, abyś trzymał kawałek plastiku przez tak długi czas, nawet jeśli jest to długie i trochę irytujące menu.
Mauro
16

Albo dynamicznie dodawałbym + 15-20 lat do roku bieżącej daty, albo wprowadzałbym pole tekstowe dla roku (co osobiście uważam, że szybciej wpisuję dwie cyfry niż przewijanie listy lat).

Bryan Denny
źródło
7
chyba że używasz telefonu komórkowego. może wolisz przeglądać lata. coś do rozważenia.
jedmao
10
Słuszna uwaga @sfjedi i nie zapominajmy, że w większości przeglądarek nadal możesz wpisać numer, a wybierze on automatycznie.
Kevin Wiskia,
1
Dobra uwaga na temat wprowadzania tekstu a wybierania. Zawsze wolałem wprowadzanie tekstu, ale ostatnio przy niektórych testach interfejsu użytkownika na Androidzie i iOS stwierdziłem, że wybrane opcje wydają się nieco łatwiejsze. Jednak użycie HTML5 type = number szybko podnosi klawiaturę numeryczną na urządzeniach mobilnych, więc to też ułatwia sprawę. Uważa, że ​​sprowadza się to do błędów walidacji; prawdopodobnie mniej błędów dzięki predefiniowanym opcjom wyboru.
Clint Pachl
Nie jestem pewien, czy to działałoby dobrze na urządzeniu mobilnym, ale co z menu rozwijanym / polem tekstowym? Możesz wpisać wartość lub wybrać taką, jak zwykle.
The Muffin Man
4

Jako teoretyczny górny limit proponuję, abyś nie musiał brać pod uwagę więcej niż oczekiwana żywotność posiadacza karty. Wikipedia robi to w swoich standardach redakcyjnych dotyczących biografii żyjących osób :

Każda osoba urodzona mniej niż 115 lat temu jest objęta niniejszą polityką, chyba że wiarygodne źródło potwierdzi śmierć tej osoby. Osoby w wieku powyżej 115 lat są uważane za zmarłe, chyba że są wymienione u najstarszych osób.

Tak więc w swoim kodzie wyszukaj bieżący rok, dodaj 115 i użyj tego jako teoretycznego górnego limitu daty ważności karty kredytowej. Nigdy więcej nie będziesz musiał dotykać tego kodu.

MetaEd
źródło
2
Powiedziałbym, że to bardzo teoretyczne. Ktoś, kto ma taką starą kartę, mógłby ją otrzymać między pierwszymi urodzinami a dniem urodzenia. A potem musieliby dożyć 115 lat!
jimp
40
Chłopcze, to jest mocna rzecz, którą palicie!
Art
7
SWIM pomyślał, że to dobry pomysł (w tamtym czasie), aby przeanalizować listę najstarszych osób na Wikipedii, aby ograniczyć pole wprowadzania wieku do tego, maxna wypadek gdyby najstarsza osoba użyła formularza po ukończeniu 116 lat ...: [
Alastair
A co z kartą firmową, która niekoniecznie jest przypisana do osoby? W takim przypadku nie ma „teoretycznego” ograniczenia.
aaronbauman
3
Ale @aaronbauman, według Sądu Najwyższego Stanów Zjednoczonych, korporacja to osoba. Zatem karta musi być ważna tylko przez 115 lat! :-)
Stonetip
1

Oto fragment kodu JavaScript, którego możesz użyć do wyświetlenia dostosowywanej listy nadchodzących lat do walidacji 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>

abd3721
źródło
0

Oto lista najlepszych sprzedawców internetowych w USA:

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
źródło
-1

Dobra rozmowa, @Alistair.

Oto generowanie miesiąca i roku w ASP.NET MVC. Dodaj to do swojego modelu widoku:

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

A to według twojego punktu widzenia:

<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>
Kuks
źródło
-1

Podczas gdy drugi przykład działa dwa razy szybciej niż pierwszy, nadal uzyskujesz datę i wyodrębniasz z niej rok 20 razy, a nie 40 razy. Lepszym rozwinięciem pętli jest:

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

Będzie to około 20 razy szybsze niż w dwukrotnie szybszym przykładzie, a także rozwiązuje niewielki błąd w oryginalnym kodzie, polegający na tym, że rok może się zmienić od jednego pobrania daty do następnego, prowadząc do nieoczekiwanych, choć w tym przypadku nieszkodliwych wyników.

user3347790
źródło
-2
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
Louis Ferreira
źródło
1
To tylko odmiana wyżej wymienionego, lepiej dodać lata, aby wybrać i zrobić menu rozwijane dla wyborów miesiąca i roku. Użytkownicy mają tendencję do wprowadzania różnych zmian miesiąca i roku, jeśli mają tylko jedno pole tekstowe.
Louis Ferreira,
-2

Jeśli potrzebujesz rozwiązania, które nie daje trzycyfrowych lat 2100+, musisz modulo datę, odpowiednio musisz wypełnić zerem wiodącym dla lat xx00-xx09, aby nie uzyskać lat jednocyfrowych.

Będzie to bardzo ważne od 2080 roku.

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

Po przeczytaniu górnej ważności PO wynoszącej 20 lat dla Amazon napisałem to proste rozwiązanie w 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>

To znacznie zmniejszyło liczbę tych noworocznych wniosków o usunięcie last yearz formularza.

Szczuplejsza wersja pętli działa ~ dwa razy szybciej:

<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
źródło
4
Czy zdajesz sobie sprawę, że dzwonienie date('Y')i date('y')20 razy każdy jest raczej powolny?
Alexis Wilke
Względnie nie, @Alexis, ale dodałem wersję, która działa dla ciebie dwa razy szybciej. : 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
źródło