2010-03-23 54 views
140

當涉及信用卡時,各種在線服務的最大到期年限有不同的值。信用卡到期日的最大年份

例如:

  • 大本營:15年(2025)
  • 亞馬遜:20年(2030)
  • 寶:19年(2029)

什麼這裏是合理的最大值?有沒有官方的指導方針?

+1

各主要網上商店之間的不一致點對於沒有官方指南非常強烈。 – 2010-03-23 14:21:37

+9

我喜歡用簡單的文本輸入來要求到期年份的網站... – Quentin 2010-03-23 14:27:53

+1

@Quentin它比阻止提交的錯誤驗證要好,除非用戶知道如何使用Web瀏覽器的開發。工具。 – Alastair 2013-01-25 14:36:43

回答

58

沒有正式的指引,因爲信用卡髮卡機構發行的卡片可能會過期。事實上,他們一直在發行卡片的時間越來越長。如果您想確定未來有多遠,您應該安排到期日期,以確保安全,並讓您的客戶有多年的選擇時間。這樣你將來可以證明你的應用程序。

僅供參考,許多信用卡髮卡機構在確定是否批准信用卡購買時不使用到期日期。因此,如果您擔心提供的日期不正確,處理器最終將對交易是否獲得批准擁有最終決定權,所以我不會擔心。

2017年7月:剛剛有一位終端用戶使用的卡從現在開始已經過了將近50年。

+1

他們可能會在沒有正確代碼的情況下批准,但他們也可能會向您收取沒有正確代碼的交易的更高費率。 – BVernon 2014-10-22 20:04:06

+0

這僅適用於AVS和CVV驗證。 – 2015-07-21 12:59:10

+0

確實,大多數發行人都會批准交易,但如果不向用戶提供年卡的選項,可能會阻止他繼續交易。我只是增加了50年,並且預計沒有發行人會希望你保留這麼長時間的塑料,即使這是一個漫長而令人討厭的下拉。除非你使用手機,否則可能是 – Mauro 2015-10-22 20:24:09

16

我要麼爲當前日期的年份動態地添加+ 15-20年,要麼提供年份的文本框輸入(我個人覺得鍵入兩位數比輸入年份列表更快)。

+7

。你可能更喜歡滑過這些年。需要考慮的事情。 – jedmao 2010-07-22 19:17:51

+10

好點@sfjedi,讓我們不要忘記,在大多數瀏覽器中,你仍然可以輸入數字,它會自動選擇。 – 2011-03-22 19:44:58

+1

關於文本輸入vs select的好處。我一直傾向於輸入文字,但最近我在Android和iOS上進行了一些UI測試,發現選擇選項似乎稍微容易一些。但是,使用HTML5的type = number可以快速提取移動設備上的數字鍵盤,從而使事情變得簡單。它認爲這歸結於驗證錯誤;預定義的選擇選項可能會減少錯誤。 – 2012-11-24 07:04:31

5

作爲理論上限,我建議您不需要考慮超過持卡人的預期壽命。維基百科目前這在他們的編輯標準biographies of living persons

小於115年前出生的任何個人本政策所涵蓋,除非有可靠消息證實個人的死亡。超過115歲的人被推定死亡,除非列入最老的人。

因此,在您的代碼中,查找當前年份,添加115,並將其用作您的理論上限到信用卡到期日期。你永遠不必再次觸摸該代碼。

+2

我會說這非常理論化。有人用一張舊的卡片在他們的第一個生日和他們出生的那一天之間的某個時間發行。然後他們將不得不活到115年! – jimp 2012-02-02 21:15:41

+33

男孩,這是一些強大的東西,你們是吸菸'! – Art 2012-08-10 02:13:03

+7

** SWIM **認爲這似乎是一個好主意(當時)解析維基百科最古老的人名單,以限制年齡輸入字段爲「最大」,以防萬一最老的人使用表格後,他們轉過了116 .. 。:[ – Alastair 2013-01-25 14:23:45

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

這大大降低了這些新的一年的請求數量從表單中刪除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> 
+4

你知道調用'date('Y')'和'date('y')'每次20次都很慢嗎? – 2016-03-05 23:06:22

+0

相對不,@Alexis,但我添加了一個版本,可以爲您快速運行兩次。 :P – Alastair 2016-03-09 16:25:25

1

良好的通話,@Alistair。

下面是ASP.NET MVC中的月和年代。添加到您的視圖模型:

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> 
0
<?php 
$y = gmdate("Y"); 
$x = 20; 
$max = ($y + $x); 
while ($y <= $max) { 
echo "<option value='$y'>$y</option>"; 
$y = $y + 1; 
} 
?> 
+1

只是上面提到的一個變體,最好是增加年份來選擇月份和年份選擇並進行下拉式選擇。如果只顯示一個文本字段,用戶往往會輸入不同的月份和年份變化。 – 2013-09-13 10:22:07

0

如果你想一個解決方案,不會產生三位數的年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"; 
    } 
?> 
0

下面是一個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>

1

儘管第二個示例的運行速度比第一個快兩倍,但您仍然可以獲取日期並提取g從20倍而不是40倍。循環的一個更好的展開是:比快兩倍,例如更快的

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

這將是20倍左右,也解決了在原來代碼中的小錯誤年會之日起的一個抓取改變到下一個導致意外,但在這種情況下,無害,結果。

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