信用卡最长有效期年份

当涉及到信用卡时,各种在线服务在最长到期年限内有不同的价值。

例如:

  • 大本营: + 15年(2025年)
  • 亚马逊: + 20年(2030)
  • Paypal: + 19 years (2029)贝宝: + 19年(2029)

这里的合理上限是多少? 有没有官方的指导方针?

70983 次浏览

由于信用卡发卡机构可选择每张过期的信用卡,因此没有官方指引。事实上,他们发行卡的时间越来越长。如果您试图确定未来应该容纳多长时间的到期日期,那么为了安全起见,应该犯错误,并给您的客户多年的选择时间。这样你就能证明你的申请了。

仅供参考,许多信用卡发行商在决定是否批准信用卡购买时不使用到期日。因此,如果你担心一个不正确的日期被提供处理器将最终有最后的发言权,是否交易被批准,所以我不会担心它。

2017年7月 : 刚刚有一个终端用户的信用卡从现在起过期了将近50年。

我要么动态地将 + 15-20年添加到当前日期的年份中,要么提供当年的文本框输入(我个人觉得输入这两个数字比滚动浏览年份列表更快)。

作为一个理论上的上限,我建议你不需要考虑超过持卡人的预期寿命。维基百科在 活人传记的编辑标准中做到了这一点:

除非有可靠的消息来源证实出生不到115年的个人已经死亡,否则这项政策适用于所有出生不到115年的个人。115岁以上的人被认为已经死亡,除非列在最老的人名单上。

因此,在代码中,查找当前年份,添加115,并将其作为信用卡过期日期的理论上限。你再也不用碰那个密码了。

在阅读了该 OP 对 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>
<?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";
}
?>

下面是一个 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倍左右,并且还解决了原始代码中的一个小错误,因为年份可能会从一个提取日期变为下一个提取日期,从而导致意想不到的结果,尽管在这种情况下是无害的。

<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>

以下是美国顶级在线零售商的样本:

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