155

就信用卡而言,各种在线服务的最长到期年份值不同。

例如:

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

这里合理的最大值是多少?有没有官方的指导方针?

4

10 回答 10

73

没有官方指南,因为信用卡发卡机构可以选择他们发行的卡何时到期。事实上,他们发行卡的时间越来越长。如果您正在尝试确定您应该在未来多长时间内适应到期日期,请在安全方面犯错,并为您的客户提供多年的选择时间。这样您就可以在未来证明您的应用程序。

仅供参考,许多信用卡发卡机构在确定是否批准信用卡购买时不使用到期日期。因此,如果您担心提供的日期不正确,处理器最终将对交易是否获得批准拥有最终决定权,所以我不会担心。

2017 年 7 月:刚刚有一个最终用户的卡在 50 年后过期。

于 2010-03-23T14:26:23.720 回答
16

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

于 2010-03-23T14:34:17.653 回答
5

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

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
于 2020-03-06T15:46:44.667 回答
4

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

任何出生于 115 年前以下的个人均受本保单承保,除非有可靠来源确认该个人已死亡。115 岁以上的人被推定死亡,除非列在最年长的人中。

因此,在您的代码中,查找当前年份,加上 115,并将其用作信用卡到期日期的理论上限。您将永远不必再次触摸该代码。

于 2011-12-16T16:08:59.670 回答
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>

于 2015-04-29T14:01:15.913 回答
-2
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
于 2013-09-13T10:20:30.343 回答
-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";
    }
?>
于 2014-11-28T13:36:19.963 回答
-2

虽然第二个示例的运行速度是第一个示例的两倍,但您仍然可以获取日期并从中提取年份 20 次而不是 40 次。更好的循环展开是:

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

这将比两倍快的示例快约 20 倍,并且还解决了原始代码中的一个小错误,即年份可能会从一次获取日期更改为下一次,导致意外的结果,尽管在这种情况下是无害的。

于 2016-06-30T06:23:06.070 回答
-3

在阅读了亚马逊 20 年的 OP 上限后,我用 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>
于 2013-01-25T14:38:13.537 回答
-7
<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> 
于 2016-10-23T23:16:47.603 回答