Максимальный год в дате истечения срока действия кредитной карты
различные онлайн-сервисы имеют разные значения для максимального года истечения срока действия, когда речь заходит о кредитных картах.
например:
- Basecamp: +15 лет (2025)
- Амазонка: +20 лет (2030)
- Paypal: +19 лет (2029)
каков здесь разумный максимум? Существуют ли какие-либо официальные рекомендации?
10 ответов:
нет никакого официального руководства, поскольку эмитенты кредитных карт могут выбрать каждый, когда карты, которые они выпускают, истекут. На самом деле они выпускают карты в течение все более и более длительных периодов времени. Если вы пытаетесь определить, как далеко в будущем вы должны учитывать сроки годности, ошибитесь на безопасной стороне и дайте своим клиентам много лет на выбор. Таким образом, вы в будущем подтвердите свое заявление.
к вашему сведению, многие эмитенты кредитных карт не использовать срок годности при определении того, следует ли одобрить покупку кредитной картой. Поэтому, если вы беспокоитесь о неправильной дате, предоставленной процессору, в конечном итоге будет иметь окончательное решение о том, одобрена ли транзакция или нет, поэтому я бы не беспокоился об этом.
июля 2017: только что был конечный пользователь с картой, срок действия которой истек почти через 50 лет.
Я бы либо динамически добавлял +15-20 лет к году текущей даты, либо предоставлял ввод текстового поля для года (который лично я нахожу быстрее для ввода двух цифр, чем для прокрутки списка лет).
в качестве теоретического верхнего предела, я предлагаю вам не нужно рассматривать больше, чем ожидаемый срок службы владельца карты. Википедия делает это в своих редакционных стандартах для биографии живых людей:
любое лицо, родившееся менее 115 лет назад, подпадает под действие настоящей Политики, если только надежный источник не подтвердил его смерть. Люди старше 115 лет считаются мертвыми, если они не указаны в самом старшем возрасте люди.
Итак, в вашем коде Найдите текущий год, добавьте 115 и используйте его в качестве теоретического верхнего предела для даты истечения срока действия кредитной карты. Тебе больше никогда не придется прикасаться к этому коду.
хороший звонок, @Alistair.
вот месяц и год поколения в ASP.NET MVC. Добавьте это в свой 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)); } }и это на ваш взгляд:
<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>
вот фрагмент кода 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>
в то время как второй пример выполняется в два раза быстрее, чем первый, вы все еще получаете дату и извлекаете из нее год 20 раз, а не 40 раз. Лучше развернуть цикл:
$StartDate=date('Y'); $EndDate=$StartDate+21; for($i=$StartDate;$i<$EndDate;$i++){ echo "<option value='".$i."'>".substr($i,2)."</option>\n";это будет примерно в 20 раз быстрее, чем в дважды более быстром примере, а также устраняет незначительную ошибку в исходном коде в том, что год может измениться от одной выборки даты к следующей, что приведет к неожиданным, хотя в этом случае безвредным результатам.
<?php $y = gmdate("Y"); $x = 20; $max = ($y + $x); while ($y <= $max) { echo "<option value='$y'>$y</option>"; $y = $y + 1; } ?>
Если вы хотите решение, которое не дает трехзначные годы 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"; } ?>
прочитав верхний срок действия OP 20 лет для Amazon, я написал Это простое решение на 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>
<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>
Comments