不同的在线服务在信用卡到期年份上有不同的最大值。
例如:
- Basecamp:+15年(2025年)
- 亚马逊:+20年(2030年)
- Paypal:+19年(2029年)
这里的合理最大值是什么?是否有官方指导意见?
不同的在线服务在信用卡到期年份上有不同的最大值。
例如:
这里的合理最大值是什么?是否有官方指导意见?
信用卡发行方没有官方准则来规定信用卡过期日期。实际上,他们正在越来越长的时间内发行信用卡。如果您试图确定未来应该为多远的到期日进行适应,请以保险起见为客户提供更多年份的选择。这样可以使您的应用程序具备未来兼容性。
另外,许多信用卡发行方在决定是否批准信用卡购买时并不使用过期日期。因此,如果您担心提供了错误的日期,则处理器最终将决定是否批准交易,所以不必担心。
2017年7月:刚刚遇到一位最长有效期将近50年的信用卡最终用户。
我可以动态地将当前日期的年份增加15-20年,或者提供一个文本框输入年份(我个人认为,手动输入两位数字比浏览年份列表更快)。
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
因此,在您的代码中,查找当前年份,加上115年,并将其用作信用卡到期日的理论上限。您将永远不必再次触及该代码。除非可靠来源已经证实该个体已经去世,否则覆盖任何115年前出生的人。超过115岁的人被认为已经死亡,除非列在最长寿命的人名单上。
这里是一个Javascript代码片段,您可以使用它来显示可自定义的信用卡验证未来年份列表:
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>
<?php
for($i=0;$i<=20;$i++){
$aktDate = sprintf("%02d", ((date('y')+$i)%100));
echo "<option value=\"{$aktDate}\">{$aktDate}</option>\n";
}
?>
虽然第二个示例的运行速度是第一个示例的两倍,但您仍然需要从日期中提取年份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;
}
?>
在阅读了OP对于亚马逊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>
这大大减少了在表单中删除“去年”这一请求的数量。
精简版本的循环运行速度快了约两倍:
<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>
date('Y')
和 date('y')
20 次都会相当慢吗? - Alexis Wilke<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>