信用卡到期日的最长年限

时间:2010-03-23 14:17:31

标签: date max credit-card billing

当涉及信用卡时,各种在线服务对于最长的到期年份具有不同的值。

例如:

  • Basecamp:+ 15年(2025年)
  • 亚马逊:+ 20年(2030年)
  • Paypal:+ 19年(2029年)

这里的合理最大值是多少?有官方指南吗?

11 个答案:

答案 0 :(得分:62)

没有官方指南,因为信用卡发卡机构可以在发卡时过期。事实上,他们已经发行了更长时间的卡片。如果您正在尝试确定未来的距离,您应该安排到期日,安全方面的错误,并为您的客户提供多年的选择。这样你就可以证明你的申请。

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

2017年7月:刚刚拥有一张卡片的最终用户将在近50年后过期。

答案 1 :(得分:16)

我要么动态地将当前日期的年份增加+ 15 - 20年,或者提供一年的文本框输入(我个人发现输入两位数字的速度要快于滚动年份列表)。

答案 2 :(得分:4)

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

  

除非有可靠消息来源证实个人死亡,否则任何不到115年前出生的人均受本政策保护。超过115岁的人被推定死亡,除非在最老的人身上列出。

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

答案 3 :(得分: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);
    }
&#13;
          <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>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

好的电话,@ 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>

答案 5 :(得分:0)

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

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

这比快速两倍的例子快20倍,并且还解决了原始代码中的一个小错误,因为年份可能会从一次提取日期变为另一次导致意外,但在这种情况下无害,结果。

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>

答案 8 :(得分:-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";
    }
?>

答案 9 :(得分:-2)

在阅读了亚马逊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>

这大大减少了从表单中删除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>

答案 10 :(得分:-4)

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