ปีสูงสุดในวันหมดอายุของบัตรเครดิต


149

บริการออนไลน์ต่างๆมีค่าแตกต่างกันสำหรับปีสูงสุดที่หมดอายุเมื่อมาถึงบัตรเครดิต

ตัวอย่างเช่น

  • Basecamp: +15 ปี (2025)
  • Amazon: +20 ปี (2030)
  • Paypal: +19 ปี (2029)

อะไรคือความสมเหตุสมผลสูงสุดที่นี่? มีแนวทางอย่างเป็นทางการหรือไม่?


1
ความไม่สอดคล้องกันในร้านค้าออนไลน์รายใหญ่นั้นมีความสำคัญอย่างยิ่งต่อแนวทางที่เป็นทางการ
Matt Ball

10
ฉันรักไซต์ที่ขอปีหมดอายุด้วยการป้อนข้อความง่ายๆ ...
Quentin

1
@Quentin ดีกว่าการตรวจสอบความผิดพลาดที่ป้องกันการส่งเว้นแต่ผู้ใช้จะรู้วิธีใช้ dev ของเว็บเบราว์เซอร์ เครื่องมือ
Alastair

4
@Alastair - ความคิดเห็นของฉันไม่ได้ตั้งใจอย่างแดกดัน
เควนติ

1
@ คำถามยุติธรรมพอ จุดไข่ปลาโยนฉัน :-P สำหรับผู้ใช้นั่นคือการใช้งานที่น่ารำคาญน้อยที่สุด แต่จากมุมมองการพัฒนา / ธุรกิจมีเพียงการป้อนข้อมูลที่ผิดพลาดมาก (และอาจทำให้ยอดขายหายไป)
Alastair

คำตอบ:


65

ไม่มีแนวทางที่เป็นทางการเนื่องจากผู้ออกบัตรเครดิตสามารถเลือกได้เมื่อบัตรที่ออกจะหมดอายุ ในความเป็นจริงพวกเขาได้ออกบัตรมาเป็นระยะเวลานานขึ้นและนานขึ้น หากคุณกำลังพยายามกำหนดว่าในอนาคตคุณควรจะกำหนดวันหมดอายุไว้นานเท่าใดให้ทำในสิ่งที่ปลอดภัยและให้ลูกค้าของคุณเลือกได้หลายปี ด้วยวิธีนี้คุณจะพิสูจน์การสมัครของคุณในอนาคต

FYI ผู้ออกบัตรเครดิตหลายรายไม่ใช้วันหมดอายุเมื่อพิจารณาว่าจะอนุมัติการซื้อบัตรเครดิตหรือไม่ ดังนั้นหากคุณกังวลเกี่ยวกับวันที่ที่ไม่ถูกต้องตัวประมวลผลจะมีคำสั่งสุดท้ายในที่สุดว่าธุรกรรมได้รับการอนุมัติหรือไม่ดังนั้นฉันจะไม่กังวลเกี่ยวกับมัน

กรกฎาคม 2017 : เพิ่งมีผู้ใช้ที่มีบัตรที่หมดอายุเกือบ 50 ปีนับจากนี้


2
พวกเขาอาจอนุมัติโดยไม่มีรหัสที่ถูกต้อง แต่พวกเขาอาจเรียกเก็บเงินจากคุณในอัตราที่สูงขึ้นในการทำธุรกรรมของคุณที่ไม่มีรหัสที่ถูกต้อง
BVernon

นั่นเป็นเรื่องจริงสำหรับการตรวจสอบ AVS และ CVV เท่านั้น
John Conde

เป็นความจริงที่ว่าผู้ออกตราสารส่วนใหญ่จะอนุมัติการทำธุรกรรมอย่างไรก็ตามไม่ให้ผู้ใช้มีตัวเลือกสำหรับปีบนบัตรของเขาอาจทำให้เขาไม่อยากทำธุรกรรม ฉันจะเพิ่มอีก 50 ปีและคาดว่าจะไม่มีผู้ออกบัตรที่ตั้งใจจะเก็บชิ้นส่วนพลาสติกไว้นานขนาดนั้นแม้ว่าจะเป็นแบบเลื่อนลงที่น่ารำคาญ
Mauro

16

ฉันจะเพิ่ม + 15-20 ปีในวันที่ปัจจุบันแบบไดนามิกหรือให้ป้อนกล่องข้อความสำหรับปี (ซึ่งโดยส่วนตัวแล้วฉันค้นหาเร็วกว่าในการพิมพ์ตัวเลขสองหลักในกว่าจะเลื่อนดูรายการปี)


7
นอกเสียจากคุณกำลังใช้โทรศัพท์มือถือ คุณอาจชอบที่จะรูดในช่วงหลายปี สิ่งที่ต้องพิจารณา
jedmao

10
จุดดี @sfjedi และอย่าลืมว่าในเบราว์เซอร์ส่วนใหญ่คุณยังคงสามารถป้อนหมายเลขและมันจะเลือกโดยอัตโนมัติ
Kevin Wiskia

1
จุดดีเกี่ยวกับการป้อนข้อความและเลือก ฉันชอบการป้อนข้อความอยู่เสมอ แต่เมื่อเร็ว ๆ นี้ด้วยการทดสอบ UI ของฉันบน Android และ iOS ฉันพบว่าตัวเลือกที่เลือกดูง่ายขึ้นเล็กน้อย อย่างไรก็ตามการใช้ type = number ของ HTML5 จะดึงแป้นพิมพ์ตัวเลขขึ้นอย่างรวดเร็วบนอุปกรณ์มือถือเพื่อให้ง่ายขึ้น มันคิดว่ามันเกิดข้อผิดพลาดในการตรวจสอบ อาจมีข้อผิดพลาดน้อยลงด้วยตัวเลือกการเลือกที่กำหนดไว้ล่วงหน้า
Clint Pachl

ฉันไม่แน่ใจว่าสิ่งนี้จะทำงานได้ดีบนอุปกรณ์มือถือ แต่จะเป็นแบบเลื่อนลง / กล่องข้อความ? คุณสามารถป้อนค่าหรือเลือกอย่างใดอย่างหนึ่งตามปกติ
มัฟฟินแมน

4

ตามข้อ จำกัด ทางทฤษฎีฉันขอเสนอว่าคุณไม่จำเป็นต้องพิจารณามากกว่าอายุการใช้งานที่คาดหวังของผู้ถือบัตร Wikipedia ทำสิ่งนี้ในมาตรฐานบรรณาธิการสำหรับชีวประวัติของบุคคลที่มีชีวิต :

บุคคลใดก็ตามที่เกิดน้อยกว่า 115 ปีที่ผ่านมาได้รับการคุ้มครองโดยนโยบายนี้เว้นแต่แหล่งที่เชื่อถือได้ได้ยืนยันการเสียชีวิตของบุคคล คนที่อายุมากกว่า 115 ปีสันนิษฐานว่าเสียชีวิตเว้นแต่จะระบุไว้ในคนที่อายุมากที่สุด

ดังนั้นในรหัสของคุณค้นหาปีปัจจุบันเพิ่ม 115 และใช้สิ่งนั้นเป็นข้อ จำกัด ด้านทฤษฎีของคุณจนถึงวันหมดอายุของบัตรเครดิต คุณจะไม่ต้องแตะรหัสนั้นอีกเลย


2
ฉันว่ามันเป็นทฤษฎี ใครบางคนที่มีบัตรเก่าจะได้รับการออกบางครั้งระหว่างวันเกิดครั้งแรกของพวกเขาและวันที่พวกเขาเกิด แล้วพวกเขาจะต้องมีชีวิตอยู่ถึง 115 ปี!
jimp

40
เด็กชายนั่นคือสิ่งที่แข็งแกร่งคุณเป็นผู้ชายที่ไร้ควัน!
ศิลปะ

7
ว่ายน้ำคิดว่ามันเป็นความคิดที่ดี (ในเวลานั้น) ในการแยกรายชื่อคนที่เก่าแก่ที่สุดของ Wikipedia เพื่อ จำกัด เขตข้อมูลการป้อนข้อมูลอายุmaxในกรณีที่คนแก่ที่สุดใช้แบบฟอร์มเมื่อพวกเขาหัน 116 ... : [
Alastair

เกี่ยวกับบัตรองค์กรที่ไม่จำเป็นต้องผูกติดกับบุคคล ในกรณีนี้ไม่มีข้อ จำกัด "เชิงทฤษฎี"
aaronbauman

3
แต่ @Aaronbauman ตามที่ศาลฎีกาของสหรัฐอเมริการะบุว่า บริษัท คือบุคคล ดังนั้นการ์ดจะต้องดีสำหรับ 115 ปี! :-)
Stonetip

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>


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

-1

โทรดีมาก @Assair

นี่คือการสร้างเดือนและปีใน 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>

-1

ในขณะที่ตัวอย่างที่สองทำงานเร็วเป็นสองเท่าเป็นครั้งแรกที่คุณยังคงได้รับวันที่และแยกปีจาก 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
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>

1
เพียงแค่รูปแบบต่าง ๆ ข้างต้นดีกว่าการเพิ่มปีเพื่อเลือกและทำการดรอปดาวน์สำหรับการเลือกเดือนและปี ผู้ใช้มักจะป้อนรูปแบบเดือนและปีที่แตกต่างกันหากนำเสนอด้วยฟิลด์ข้อความเดียว
Louis Ferreira

-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";
    }
?>

-3

หลังจากอ่านความถูกต้องบนของ 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 ครั้งแต่ละครั้งค่อนข้างช้า
Alexis Wilke

ไม่ใช่ @Alexis แต่ฉันได้เพิ่มเวอร์ชันที่ทำงานเร็วเป็นสองเท่าสำหรับคุณ : 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> 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.