信用卡到期日的最大年份
在信用卡方面,各种在线服务的最大有效期限有不同的值。
例如:
- 大本营:十五年(2025年)
- 亚马逊:+20年(2030年)
- 贝宝:+19年(2029)
这里合理的最大值是多less? 有没有官方的指导方针?
没有正式的指导方针,信用卡发卡机构可以在每张卡发行期满时select。 事实上,他们一直在发行卡片的时间越来越长。 如果您想确定未来有多远,您应该安排到期date,以保证安全,并让您的客户有多年的select余地。 这样你的未来certificate你的申请。
仅供参考,许多信用卡发卡机构在决定是否批准信用卡购买时不使用到期date。 所以如果你担心提供的date不正确,处理器最终会对交易是否被批准有最后的决定权,所以我不用担心。
2017年7月 :刚刚有一个terminal用户,从现在开始已经过了将近50年的卡。
我要么为当前date的年份dynamic地添加+ 15 – 20年,要么为年份提供一个文本框input(我个人觉得input两位数比input年份列表更快)。
作为一个理论的上限,我build议你不需要考虑持卡人的预期寿命。 维基百科在他们的生活人物传记编辑标准中这样做:
任何115年以前出生的个人都受此政策的保护,除非有可靠的消息来源证实了这个人的死亡。 超过115岁的人被推定死亡,除非在最古老的人列出。
因此,在您的代码中,查看当前年份,添加115,并将其用作信用卡到期date的理论上限。 你永远不会再碰这个代码。
好的电话,@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>
虽然第二个例子的运行速度比第一个快两倍,但您仍然可以获得date,并从中提取20次而不是40次。 更好地展开循环是:
$StartDate=date('Y'); $EndDate=$StartDate+21; for($i=$StartDate;$i<$EndDate;$i++){ echo "<option value='".$i."'>".substr($i,2)."</option>\n";
这个速度比两倍速的例子要快20倍左右,同时也解决了原始代码中的一个小错误,因为在这个例子中,年份可能会从一次取数据到下一次导致意想不到的变化,尽pipe在这种情况下是无害的。
<?php $y = gmdate("Y"); $x = 20; $max = ($y + $x); while ($y <= $max) { echo "<option value='$y'>$y</option>"; $y = $y + 1; } ?>
如果你想要一个不会产生三位数年份的解决scheme,那么你必须重新计算date,所以你必须用xx00-xx09年的前导零填充,以获得单位数字的年份。
从2080年开始这将是非常重要的。
<?php for($i=0;$i<=20;$i++){ $aktDate = sprintf("%02d", ((date('y')+$i)%100)); echo "<option value=\"{$aktDate}\">{$aktDate}</option>\n"; } ?>
这里是一个Javascript代码片段,你可以使用它来显示一个即将到来的CCvalidation年份列表:
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>
在阅读了OP对亚马逊20年的有效性之后,我用PHP写了这个简单的解决scheme:
<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>
这大大减less了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>