Năm tối đa trong ngày hết hạn của thẻ tín dụng


149

Các dịch vụ trực tuyến khác nhau có các giá trị khác nhau cho năm hết hạn tối đa, khi nói đến Thẻ tín dụng.

Ví dụ:

  • Basecamp: +15 năm (2025)
  • Amazon: +20 năm (2030)
  • Paypal: +19 năm (2029)

Tối đa hợp lý ở đây là gì? Có hướng dẫn chính thức nào không?


1
Sự không nhất quán trên các cửa hàng trực tuyến lớn chỉ ra khá mạnh mẽ đối với không có hướng dẫn chính thức.
Matt Ball

10
Tôi yêu các trang web yêu cầu hết hạn sử dụng với một văn bản đầu vào đơn giản
Quentin

1
@Quentin tốt hơn so với xác thực bị lỗi ngăn chặn gửi, trừ khi người dùng biết cách sử dụng dev của trình duyệt web. công cụ.
Alastair

4
@Alastair - Nhận xét của tôi không có ý mỉa mai.
Quentin

1
@Cách đủ công bằng. Dấu chấm lửng ném tôi. :-P Đối với người dùng, đó rõ ràng là cách triển khai ít gây phiền nhiễu nhất nhưng từ góc độ phát triển / doanh nghiệp, sẽ có quá nhiều đầu vào sai lầm (và điều đó có thể gây mất doanh số).
Alastair

Câu trả lời:


65

Không có hướng dẫn chính thức vì các tổ chức phát hành thẻ tín dụng có thể chọn từng thẻ khi thẻ họ phát hành sẽ hết hạn. Trong thực tế, họ đã được phát hành thẻ trong thời gian dài hơn và lâu hơn. Nếu bạn đang cố gắng xác định khoảng thời gian xa trong tương lai, bạn nên sắp xếp ngày hết hạn, hãy bình tĩnh và cho khách hàng của bạn nhiều năm để lựa chọn. Bằng cách đó bạn sẽ chứng minh ứng dụng của mình trong tương lai.

FYI, nhiều tổ chức phát hành thẻ tín dụng không sử dụng ngày hết hạn khi xác định có chấp thuận mua thẻ tín dụng hay không. Vì vậy, nếu bạn lo lắng về một ngày không chính xác được cung cấp, bộ xử lý cuối cùng sẽ có tiếng nói cuối cùng về việc giao dịch có được chấp thuận hay không vì vậy tôi sẽ không lo lắng về điều đó.

Tháng 7 năm 2017 : Chỉ cần có một người dùng cuối với thẻ đã hết hạn gần 50 năm kể từ bây giờ.


2
Họ có thể phê duyệt mà không có mã chính xác, nhưng họ cũng có thể tính phí cao hơn cho các giao dịch của bạn không có mã chính xác.
BVernon

Điều đó chỉ đúng với xác minh AVS và CVV.
John Conde

Đúng là hầu hết các nhà phát hành sẽ chấp thuận giao dịch bằng mọi giá, TUY NHIÊN không cung cấp cho người dùng tùy chọn trong năm trên thẻ của anh ta có thể không khuyến khích anh ta tiếp tục giao dịch. Tôi chỉ cần thêm 50 năm nữa và hy vọng sẽ không có nhà phát hành nào có ý định cho bạn giữ một miếng nhựa trong thời gian dài như vậy, ngay cả khi đó là một khoảng thời gian dài và một chút khó chịu.
Mauro

16

Tôi có thể tự động thêm + 15-20 năm vào năm hiện tại HOẶC cung cấp đầu vào hộp văn bản cho năm (cá nhân tôi thấy nhanh hơn để nhập hai chữ số vào hơn là cuộn qua danh sách năm).


7
trừ khi bạn đang sử dụng điện thoại di động. bạn có thể thích vuốt qua các năm. một cái gì đó để xem xét.
jedmao

10
Điểm hay @sfjedi và đừng quên rằng trong hầu hết các trình duyệt, bạn vẫn có thể nhập số và nó sẽ tự động chọn.
Kevin Wiskia

1
Điểm tốt về nhập văn bản so với chọn. Tôi luôn thích nhập văn bản, nhưng gần đây với một số thử nghiệm giao diện người dùng của tôi trên Android và iOS, tôi thấy rằng các tùy chọn chọn có vẻ dễ dàng hơn một chút. Tuy nhiên, việc sử dụng loại = số của HTML5 sẽ nhanh chóng kéo bàn phím số lên thiết bị di động, do đó điều đó cũng giúp mọi việc trở nên dễ dàng. Nó nghĩ rằng nó đi xuống lỗi xác nhận; có lẽ ít lỗi hơn với các tùy chọn chọn được xác định trước.
Clint Pachl

Tôi không chắc điều này có hoạt động tốt trên thiết bị di động không, nhưng còn hộp thả xuống / hộp văn bản thì sao? Bạn có thể nhập một giá trị hoặc chọn một giá trị như bình thường.
Người đàn ông Muffin

4

Là giới hạn trên lý thuyết, tôi đề xuất rằng bạn không cần phải xem xét nhiều hơn tuổi thọ dự kiến ​​của chủ thẻ. Wikipedia thực hiện điều này trong các tiêu chuẩn biên tập của họ cho tiểu sử của những người sống :

Bất kỳ cá nhân nào sinh ra ít hơn 115 năm trước đều được bảo hiểm bởi chính sách này trừ khi một nguồn đáng tin cậy đã xác nhận cái chết của cá nhân đó. Những người trên 115 tuổi được cho là đã chết trừ khi được liệt kê ở những người già nhất.

Vì vậy, trong mã của bạn, hãy tra cứu năm hiện tại, thêm 115 và sử dụng đó làm giới hạn trên lý thuyết của bạn cho ngày hết hạn thẻ tín dụng. Bạn sẽ không bao giờ phải chạm vào mã đó nữa.


2
Tôi muốn nói rằng đó là lý thuyết. Một người nào đó có thẻ cũ sẽ được cấp vào khoảng thời gian giữa ngày sinh nhật đầu tiên của họ và ngày họ được sinh ra. Và sau đó họ sẽ phải sống tới 115 năm!
dong dỏng

40
Chàng trai đó là một số thứ mạnh mẽ mà các bạn đang hút thuốc!
Nghệ thuật

7
SWIM nghĩ rằng có vẻ như đó là một ý tưởng tốt (vào thời điểm đó) để phân tích danh sách những người già nhất của Wikipedia để hạn chế trường nhập tuổi maxtheo trường hợp đó chỉ trong trường hợp người già nhất sử dụng biểu mẫu khi họ bước sang tuổi 116 ...: [
Alastair

Điều gì về một thẻ công ty không nhất thiết phải gắn với một cá nhân? Trong trường hợp đó, không có giới hạn "lý thuyết".
aaronbauman

3
Nhưng @aaronbauman, theo Tòa án Tối cao Hoa Kỳ, một công ty là một người. Do đó, thẻ phải chỉ tốt trong 115 năm! :-)
Stonetip

1

Dưới đây là đoạn mã Javascript mà bạn có thể sử dụng để hiển thị danh sách tùy chỉnh các năm sắp tới để xác thực 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>


0

Dưới đây là mẫu của các nhà bán lẻ trực tuyến hàng đầu của Hoa Kỳ:

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

-1

Cuộc gọi tốt, @Alistair.

Đây là thế hệ tháng và năm trong ASP.NET MVC. Thêm phần này vào viewmodel của bạn:

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));
    }
}

Và điều này theo quan điểm của bạn:

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

-1

Trong khi ví dụ thứ hai chạy nhanh gấp đôi so với ví dụ đầu tiên, bạn vẫn nhận được ngày và trích xuất năm từ nó 20 lần thay vì 40 lần. Một vòng lặp không kiểm soát tốt hơn là:

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

Điều đó sẽ nhanh hơn khoảng 20 lần so với ví dụ nhanh gấp đôi và cũng giải quyết một lỗi nhỏ trong mã gốc trong năm đó có thể thay đổi từ một lần lấy ngày sang ngày tiếp theo dẫn đến kết quả không mong muốn, mặc dù trong trường hợp này là vô hại.


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

1
Chỉ cần một biến thể trên đã nói ở trên, tốt hơn là thêm các năm để chọn và thực hiện thả xuống cho các lựa chọn tháng và năm. Người dùng có xu hướng nhập các biến thể tháng và năm khác nhau nếu chỉ được trình bày với một trường văn bản duy nhất.
Louis Ferreira

-2

Nếu bạn muốn một giải pháp không mang lại năm ba chữ số 2100+, bạn phải điều chỉnh ngày, do đó, bạn phải điền số 0 đứng đầu cho xx00-xx09 năm để không có được một năm chữ số.

Điều này sẽ rất quan trọng bắt đầu vào năm 2080.

<?php
    for($i=0;$i<=20;$i++){
        $aktDate = sprintf("%02d", ((date('y')+$i)%100));
        echo "<option value=\"{$aktDate}\">{$aktDate}</option>\n";
    }
?>

-3

Sau khi đọc hiệu lực cao hơn 20 năm của OP cho Amazon, tôi đã viết giải pháp đơn giản này bằng 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>

Điều này đã làm giảm đáng kể số lượng các yêu cầu năm mới để loại bỏ last yearkhỏi một biểu mẫu.

Một phiên bản gọn hơn của vòng lặp chạy nhanh gấp đôi:

<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
Bạn có nhận ra rằng gọi date('Y')date('y')20 lần mỗi lần khá chậm?
Alexis Wilke

Tương đối không, @Alexis nhưng tôi đã thêm một phiên bản chạy nhanh gấp đôi cho bạn. : P
Alastair

-6
<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> 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.