Максимальний рік закінчення терміну дії кредитної картки


149

Різні Інтернет-сервіси мають різні значення протягом максимального року закінчення терміну дії, коли мова йде про кредитні картки.

Наприклад:

  • Basecamp: +15 років (2025)
  • Амазонка: +20 років (2030)
  • Paypal: +19 років (2029)

Який тут розумний максимум? Чи є офіційні вказівки?


1
Невідповідність основних інтернет-магазинів доволі сильно вказує на відсутність офіційних правил.
Метт Бал

10
Я люблю сайти, які просять закінчити рік із простим введенням тексту…
Квентін,

1
@Quentin, це краще, ніж помилкова перевірка, яка перешкоджає поданню, якщо користувач не знає, як використовувати розробник веб-браузера. інструменти.
Аластер

4
@Alastair - Мій коментар не розглядався саркастично.
Квентін

1
@Quention Досить справедливо. Еліпсис кинув мене. :-P Для користувача це явно найменш дратує впровадження, але з точки зору розвитку / бізнесу, просто так багато помилкових даних (і це може спричинити втрату продажів).
Аластер

Відповіді:


65

Офіційного керівництва не існує, оскільки емітенти кредитних карток можуть обирати кожного, коли термін дії карт, які вони видають, закінчується. Насправді вони випускають картки протягом більш тривалого та тривалого періодів часу. Якщо ви намагаєтеся визначити, наскільки далеко в майбутньому вам слід встановити терміни придатності, помиліться на безпечному боці та надайте своїм клієнтам багато років на вибір. Таким чином ви надалі підтвердите свою заявку.

БЮР, багато емітентів кредитних карток не використовують дату закінчення терміну придатності при визначенні того, затверджувати чи ні купувати кредитну картку Тож, якщо ви переживаєте за неправильну дату надання процесору, в кінцевому рахунку, буде остаточно сказати, чи угода затверджена чи ні, тож я б не хвилювався про це.

Липень 2017 року : Лише кінцевий користувач мав картку, термін дії якої закінчився майже 50 років.


2
Вони можуть затвердити без правильного коду, але можуть також стягувати вам більш високі тарифи за транзакції, які не мають правильних кодів.
BVernon

Це справедливо лише для верифікації AVS та CVV.
Джон Конде

Це правда, що більшість емітентів все-таки схвалить транзакцію, ЯКЩО не надання користувачеві опції на рік на його картці, це може перешкодити йому продовжувати транзакцію. Я б просто додав 50 років і, напевно, жоден емітент не збирається тримати такий шматок пластику так довго, навіть якщо це буде довге і трохи дратівливе випадання.
Мауро

16

Я б або динамічно додав + 15-20 років до року поточної дати АБО надав введення текстового поля за рік (який особисто мені здається швидше набрати дві цифри, ніж прокрутити список років).


7
якщо ви не використовуєте мобільний телефон, можливо. ви, можливо, віддасте перевагу роками. щось розглянути.
jedmao

10
Добре вказуйте @sfjedi, і не будемо забувати, що в більшості браузерів ви все одно можете ввести цифру, і вона автоматично вибереться.
Кевін Віскіа

1
Хороший момент щодо введення тексту проти вибору. Я завжди віддав перевагу вводу тексту, але останнім часом, коли я працював на деяких тестах інтерфейсу користувача на Android та iOS, я виявив, що вибрати варіанти здається трохи простіше. Однак, використовуючи тип HTML5 type = number, швидко перетягується цифрова клавіатура на мобільних пристроях, і це також робить прості речі. Він думає, що зводиться до помилок перевірки; ймовірно, менше помилок із заздалегідь заданими параметрами вибору.
Клінт Пахл

Я не впевнений, чи добре це буде працювати на мобільному пристрої, але як щодо спадного / текстового поля? Ви можете або ввести значення, або вибрати таке, як звичайне.
The Muffin Man

4

В якості теоретичної верхньої межі я пропоную вам не враховувати більше очікуваного терміну експлуатації власника картки. Вікіпедія робить це у своїх редакційних стандартах для біографій живих людей :

Будь-яка особа, народжена менше 115 років тому, підпадає під дію цієї політики, якщо достовірне джерело не підтвердило смерть особи. Люди старше 115 років вважаються загиблими, якщо їх не вказано серед найстаріших людей.

Отже, у своєму коді шукайте поточний рік, додайте 115 та використовуйте це як свою теоретичну верхню межу до дати закінчення терміну дії кредитної картки. Вам більше ніколи не доведеться торкатися цього коду.


2
Я б сказав, що це дуже теоретично. Хтось із карткою, котра давня людина, видав би її колись між першим днем ​​народження та днем ​​народження. І тоді їм довелося б дожити до 115 років!
jimp

40
Хлопчик, це якісь сильні речі, які ви палите!
Мистецтво

7
SWIM подумав, що це було б хорошою ідеєю (на той час) проаналізувати список найстаріших людей Вікіпедії, щоб обмежити поле для введення віку maxлише на той випадок, якщо найстарша людина використовує форму, коли їм виповнилося 116 ...: [
Alastair

Що з корпоративною карткою, яка не обов'язково прив’язана до фізичної особи? У цьому випадку "теоретичної" межі немає.
aaronbauman

3
Але @aaronbauman, за версією Верховного суду США, корпорація - це людина. Таким чином, картка повинна бути доброю лише 115 років! :-)
Стоунтіп

1

Ось фрагмент коду Javascript, який можна використовувати для відображення настроюваного списку майбутніх років для перевірки 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

Ось вибірка провідних американських інтернет-магазинів:

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

Гарний дзвінок, @Alistair.

Ось місяць і рік покоління в ASP.NET MVC. Додайте це до своєї моделі перегляду:

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

І це на ваш погляд:

<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

Хоча другий приклад працює вдвічі швидше, ніж перший, ви все ще отримуєте дату і витягуєте рік з неї в 20 разів, а не в 40 разів. Краще розгортання циклу:

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

Це буде приблизно в 20 разів швидше, ніж удвічі швидший приклад, а також вирішує незначну помилку в початковому коді, оскільки рік може змінитись від одного отримання дати до наступного, що призведе до несподіваних, хоча в цьому випадку нешкідливих результатів.


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

1
Лише варіація вищезгаданого, краще додати роки для вибору та випадання спадів для вибору місяця та року. Користувачі, як правило, вводять різні місячні та різницькі зміни, якщо вони просто представлені одним текстовим полем.
Луї Феррейра

-2

Якщо ви хочете отримати рішення, яке не приносить трицифрових років 2100+, вам слід модулювати дату, відповідно, ви повинні заповнити провідний нуль протягом xx00-xx09 років, щоб не отримати однозначних років.

Це буде дуже важливо, починаючи з 2080 року.

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

-3

Прочитавши версію дій АП на Amazon 20 років, я написав це просте рішення в 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>

Це значно зменшило кількість цих новорічних запитів на видалення last yearз форми.

Більш швидка версія циклу працює ~ вдвічі швидше:

<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
Чи усвідомлюєте ви, що дзвінки date('Y')і по date('y')20 разів кожен досить повільні?
Алексіс Вілке

Щодо ні, @Alexis, але я додав версію, яка працює вдвічі швидше для вас. : 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> 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.