クレジットカードの有効期限の最大年


149

クレジットカードに関しては、さまざまなオンラインサービスの最大有効年数の値が異なります。

例えば:

  • ベースキャンプ:+15年(2025)
  • アマゾン:+20年(2030)
  • Paypal:+19年(2029)

ここで妥当な最大値はいくつですか?公式ガイドラインはありますか?


1
主要なオンラインストア全体の不整合は、公式ガイドラインがないことを強く示しています。
マットボール

10
シンプルなテキスト入力で有効期限を尋ねるサイトが大好きです…
Quentin

1
@Quentinは、ユーザーがWebブラウザーの開発者の使用方法を知らない限り、送信を妨げる誤った検証よりも優れています。ツール。
Alastair 2013年

4
@Alastair —私のコメントは皮肉な意図ではありませんでした。
クエンティン2013年

1
@Quentionフェア十分。省略記号が私を投げました。:-Pユーザーにとって、それは明らかに最も煩わしい実装ではありませんが、開発/ビジネスの観点からは、非常に多くの誤った入力があり(それが売上の損失の原因になる可能性があります)。
Alastair 2013年

回答:


65

クレジットカードの発行者は、発行するカードの有効期限が切れるときにそれぞれを選択できるため、公式のガイドラインはありません。実際、彼らはより長い間カードを発行してきました。有効期限に対応する必要がある将来の期間を決定しようとしている場合は、安全面を考慮して、顧客に何年も選択できるようにしてください。そうすれば、アプリケーションの将来の証明になります。

ちなみに、多くのクレジットカード発行会社は、クレジットカードの購入を承認するかどうかを決定するときに有効期限を使用しません。したがって、間違った日付が提供されるのではないかと心配している場合は、最終的にトランザクションが承認されるかどうかの最終決定権がプロセッサーにあるため、心配する必要はありません。

2017年7月:約50年後に有効期限が切れたカードを持つエンドユーザーがいた。


2
彼らは正しいコードなしで承認するかもしれません、しかし彼らはまたあなたに正しいコードを持っていないあなたの取引により高いレートを請求するかもしれません。
BVernon 2014年

これは、AVSおよびCVV検証にのみ当てはまります。
John Conde

とにかく、ほとんどの発行者がトランザクションを承認することは事実ですが、カードに年のオプションをユーザーに提供しないと、トランザクションを続行することを思いとどまらせる可能性があります。私は50年を追加するだけで、発行者がプラスチックの断片をその間長く保持するつもりはないと思われます。たとえそれが長くて厄介なドロップダウンであってもです。
マウロ

16

現在の日付の年に+ 15-20年を動的に追加するか、年のテキストボックス入力を提供します(個人的には、年のリストをスクロールするよりも2桁を入力する方が速いと思います)。


7
あなたが携帯電話を使用しているのでない限り、多分。あなたは何年もスワイプすることを好むかもしれません。考慮すべきこと。
jedmao 2010

10
良い点@sfjedi、そしてほとんどのブラウザではまだ数字を入力することができ、自動的に選択されることを忘れないでください。
Kevin Wiskia

1
テキスト入力と選択の良い点。私は常にテキスト入力を好みましたが、最近AndroidとiOSでのUIテストの一部で、選択オプションが少し簡単に見えるようになりました。ただし、HTML5のtype = numberを使用すると、モバイルデバイスの数字キーボードがすぐに表示されるため、物事も簡単になります。それは検証エラーに帰着すると思います。定義済みの選択オプションを使用すると、おそらくエラーが少なくなります。
Clint Pachl

これがモバイルデバイスでうまく機能するかどうかはわかりませんが、ドロップダウン/テキストボックスはどうですか?値を入力するか、通常のように選択できます。
マフィンマン14

4

理論的な上限として、カード所有者の予想される寿命以上のものを考慮する必要がないことを提案します。ウィキペディアは、生きている人の伝記のための編集基準でこれを行います:

信頼できる情報源が個人の死亡を確認していない限り、115年未満前に生まれた個人はこのポリシーの対象になります。115歳以上の人は、最高齢者に記載されていない限り、死亡していると推定されます。

したがって、コードで現在の年を調べて115を加算し、それをクレジットカードの有効期限の理論上の上限として使用します。そのコードに再度触れる必要はありません。


2
それは理論的なことだと思います。古いカードを持っている人は、最初の誕生日から生まれた日までの間に発行されたはずです。そして、彼らは115年まで生きなければならないでしょう!
jimp

40
君がスモーキンであるいくつかの強力なものである少年!
アート

7
SWIMは、それに年齢入力フィールドを制限するために、ウィキペディア最古の人々のリストを解析するために(当時)は良いアイデアのように見えたと思ったmax...彼らは116になったら、最も古い人はフォームを使用念のために:[
アラステア

必ずしも個人に関連付けられていないコーポレートカードはどうですか?その場合、「理論的な」制限はありません。
aaronbauman 2015年

3
しかし、@ aaronbaumanは、米国の最高裁判所によると、企業は人です。したがって、カードは115年間のみ有効でなければなりません。:-)
2016年

1

CC検証の次の年のカスタマイズ可能なリストを表示するために使用できるJavaScriptコードスニペットを次に示します。

    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

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

-1

2番目の例は最初の例の2倍の速度で実行されますが、日付を取得し、年を40回ではなく20回抽出しています。ループのより適切な展開は次のとおりです。

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

これは、2倍の速度の例よりも約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

2桁以上の3桁の年を生成しないソリューションが必要な場合は、日付をモジュロする必要があります。したがって、xx00〜xx09の年の先頭にゼロを入力して、1桁の年にならないようにする必要があります。

これは2080年から非常に重要になります。

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

-3

OPのAmazonでの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により、フォームから削除するこれらの新年の要求の数が大幅に減少しました。

無駄のないループバージョンは、2倍の速さで実行されます。

<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ですが、実行速度が2倍になるバージョンを追加しました。:P
Alastair 2016年

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