Tahun Maksimum pada Tanggal Kadaluarsa Kartu Kredit

149

Berbagai layanan online memiliki nilai berbeda untuk tahun kedaluwarsa maksimum, dalam hal Kartu Kredit.

Misalnya:

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

Berapa maksimum yang masuk akal di sini? Apakah ada pedoman resmi?

Seni
sumber
1
Ketidakkonsistenan di seluruh toko online besar menunjukkan cukup kuat terhadap tidak adanya pedoman resmi.
Matt Ball
10
Saya suka situs yang meminta tahun kedaluwarsa dengan input teks sederhana ...
Quentin
1
@ Quentin lebih baik daripada validasi yang salah yang mencegah pengiriman, kecuali jika pengguna tahu cara menggunakan pengembang peramban web. alat.
Alastair
4
@Alastair - Komentar saya tidak dimaksudkan dengan sarkastis.
Quentin
1
@ Quention Cukup adil. Elips itu melemparku. :-P Untuk pengguna, itu jelas implementasi yang paling tidak mengganggu tetapi dari perspektif pengembangan / bisnis, hanya akan ada begitu banyak input yang salah (dan itu bisa menyebabkan penjualan hilang).
Alastair

Jawaban:

65

Tidak ada pedoman resmi karena penerbit kartu kredit dapat memilih masing-masing ketika kartu yang mereka terbitkan akan kedaluwarsa. Bahkan mereka telah mengeluarkan kartu untuk jangka waktu yang lebih lama dan lebih lama. Jika Anda mencoba menentukan seberapa jauh ke masa depan Anda harus mengakomodasi tanggal kedaluwarsa, berbuat salah dan berikan pelanggan Anda waktu bertahun-tahun untuk dipilih. Dengan begitu Anda bisa membuktikan aplikasi Anda di masa depan.

FYI, banyak penerbit kartu kredit tidak menggunakan tanggal kedaluwarsa ketika menentukan apakah akan menyetujui pembelian kartu kredit atau tidak. Jadi, jika Anda khawatir tentang tanggal yang salah diberikan prosesor pada akhirnya akan memiliki keputusan akhir tentang apakah transaksi disetujui atau tidak jadi saya tidak akan khawatir tentang hal itu.

Juli 2017 : Baru saja memiliki pengguna akhir dengan kartu yang kedaluwarsa hampir 50 tahun dari sekarang.

John Conde
sumber
2
Mereka mungkin menyetujui tanpa kode yang benar, tetapi mereka juga mungkin membebankan tarif lebih tinggi pada transaksi Anda yang tidak memiliki kode yang benar.
BVernon
Itu hanya berlaku untuk verifikasi AVS dan CVV.
John Conde
Memang benar bahwa sebagian besar emiten akan menyetujui transaksi, NAMUN tidak memberikan pengguna dengan opsi untuk tahun ini pada kartunya mungkin menghambat dia untuk melanjutkan transaksi. Saya baru saja menambahkan 50 tahun dan berharap tidak ada penerbit yang mau Anda menyimpan sepotong plastik selama itu, bahkan jika itu dropdown panjang dan sedikit mengganggu.
Mauro
16

Saya akan secara dinamis menambahkan + 15-20 tahun ke tahun tanggal saat ini ATAU memberikan input kotak teks untuk tahun tersebut (yang secara pribadi saya temukan lebih cepat untuk mengetik dua digit daripada menggulir daftar tahun).

Bryan Denny
sumber
7
kecuali Anda menggunakan ponsel, mungkin. Anda mungkin lebih suka menggesek selama bertahun-tahun. sesuatu untuk dipertimbangkan.
jedmao
10
Good point @ sfjedi, dan jangan lupa bahwa di sebagian besar browser Anda masih dapat memasukkan nomor dan itu akan otomatis memilih.
Kevin Wiskia
1
Poin bagus tentang input teks vs pilih. Saya selalu lebih suka input teks, tetapi akhir-akhir ini dengan beberapa pengujian UI saya di Android dan iOS, saya menemukan bahwa opsi pilih tampak sedikit lebih mudah. Namun, menggunakan type = number HTML5 dengan cepat menarik keyboard numerik pada perangkat seluler, sehingga membuat semuanya menjadi mudah juga. Itu pikir itu datang ke kesalahan validasi; mungkin lebih sedikit kesalahan dengan opsi pilih yang telah ditentukan.
Clint Pachl
Saya tidak yakin apakah ini akan bekerja dengan baik pada perangkat seluler, tetapi bagaimana dengan dropdown / kotak teks? Anda bisa memasukkan nilai atau memilih yang seperti biasa.
The Muffin Man
4

Sebagai batas atas teoretis, saya mengusulkan agar Anda tidak perlu mempertimbangkan lebih dari perkiraan umur pemegang kartu. Wikipedia melakukan ini dalam standar editorial mereka untuk biografi orang hidup :

Setiap individu yang lahir kurang dari 115 tahun yang lalu dicakup oleh kebijakan ini kecuali jika sumber yang dapat dipercaya telah mengkonfirmasi kematian individu tersebut. Orang yang berusia di atas 115 tahun dianggap tewas kecuali terdaftar sebagai orang tertua.

Jadi, dalam kode Anda, cari tahun ini, tambahkan 115, dan gunakan itu sebagai batas atas teoritis Anda ke tanggal kedaluwarsa kartu kredit. Anda tidak perlu menyentuh kode itu lagi.

MetaEd
sumber
2
Menurut saya itu sangat teoretis. Seseorang dengan kartu yang setua itu akan dikeluarkan suatu waktu antara ulang tahun pertama mereka dan hari mereka dilahirkan. Dan kemudian mereka harus hidup sampai 115 tahun!
jimp
40
Anak laki-laki itu beberapa hal yang kuat kalian sedang merokok!
Seni
7
SWIM berpikir sepertinya ide yang bagus (pada saat itu) untuk mem-parsing daftar orang tertua Wikipedia untuk membatasi bidang input usia maxhanya untuk berjaga-jaga seandainya orang tertua menggunakan formulir begitu mereka berusia 116 ...: [
Alastair
Bagaimana dengan kartu perusahaan yang tidak terikat dengan seseorang? Dalam hal ini, tidak ada batasan "teoritis".
aaronbauman
3
Tapi @aaronbauman, menurut Mahkamah Agung AS, korporasi adalah seseorang. Dengan demikian, kartu itu hanya baik untuk 115 tahun! :-)
Stonetip
1

Berikut ini cuplikan kode Javascript yang dapat Anda gunakan untuk menampilkan daftar tahun yang dapat disesuaikan untuk validasi 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>

abd3721
sumber
0

Berikut adalah contoh pengecer online top AS:

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
Tom Howard
sumber
-1

Panggilan yang bagus, @airlist.

Inilah generasi bulan dan tahun di ASP.NET MVC. Tambahkan ini ke model tampilan Anda:

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

Dan ini menurut Anda:

<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>
Rap
sumber
-1

Sementara contoh kedua berjalan dua kali lebih cepat daripada yang pertama Anda masih mendapatkan tanggal dan mengekstraksi tahun dari itu 20 kali daripada 40 kali. Buka gulungan yang lebih baik adalah:

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

Itu akan menjadi sekitar 20 kali lebih cepat daripada contoh dua kali lebih cepat dan juga mengatasi bug kecil dalam kode asli di mana tahun dapat berubah dari satu pengambilan tanggal ke yang berikutnya mengarah ke yang tak terduga, meskipun dalam kasus ini tidak berbahaya, hasilnya.

pengguna3347790
sumber
-2
<?php 
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
Louis Ferreira
sumber
1
Hanya variasi pada yang disebutkan di atas, lebih baik menambahkan tahun untuk memilih dan membuat dropdown untuk pilihan bulan dan tahun. Pengguna cenderung memasukkan variasi bulan dan tahun secara berbeda jika hanya disajikan dengan satu bidang teks.
Louis Ferreira
-2

Jika Anda menginginkan solusi yang tidak menghasilkan tahun tiga digit 2100+, Anda harus memodulasi tanggalnya, karenanya Anda harus mengisi dengan memimpin nol selama xx00-xx09 tahun untuk tidak mendapatkan tahun digit tunggal.

Ini akan sangat penting mulai tahun 2080.

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

Setelah membaca validitas tertinggi 20 tahun OP untuk Amazon, saya menulis solusi sederhana ini dalam 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>

Ini telah sangat mengurangi jumlah permintaan tahun baru ini untuk dihapus last yeardari formulir.

Versi loop yang lebih ramping berjalan ~ dua kali lebih cepat:

<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>
Alastair
sumber
4
Apakah Anda menyadari bahwa menelepon date('Y')dan date('y')masing-masing 20 kali agak lambat?
Alexis Wilke
Relatif tidak, @Alexis tapi saya telah menambahkan versi yang berjalan dua kali lebih cepat untuk Anda. : 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> 
Rollox
sumber