クレジットカードに関しては、さまざまなオンラインサービスの最大有効期限の値が異なります。
例えば:
- Basecamp:+15年(2025)
- アマゾン:+20年(2030)
- ペイパル:+19年(2029)
ここでの合理的な最大値はいくつですか?公式のガイドラインはありますか?
クレジットカードに関しては、さまざまなオンラインサービスの最大有効期限の値が異なります。
例えば:
ここでの合理的な最大値はいくつですか?公式のガイドラインはありますか?
クレジットカードの発行者は、発行するカードの有効期限が切れるときにそれぞれを選択できるため、公式のガイドラインはありません。実際、彼らはますます長い期間カードを発行してきました。有効期限に対応する必要がある将来の距離を決定しようとしている場合は、安全を期して、顧客に何年も選択できるようにしてください。そうすれば、将来的にアプリケーションを保証できます。
参考までに、多くのクレジットカード発行者は、クレジットカードの購入を承認するかどうかを決定する際に有効期限を使用しません。したがって、間違った日付が提供されることを心配している場合、処理者は最終的にトランザクションが承認されるかどうかについて最終決定を下すので、私はそれについて心配しません。
2017年7月:今からほぼ50年後に有効期限が切れたカードを持ったエンドユーザーがいました。
現在の日付の年に+15〜20年を動的に追加するか、年のテキストボックス入力を提供します(個人的には、年のリストをスクロールするよりも2桁の数字を入力する方が速いと思います)。
これは、米国のトップオンライン小売業者のサンプルです。
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
理論上の上限として、カード所有者の予想寿命を超えることを考慮する必要はないことを提案します。ウィキペディアは、生きている人の伝記の編集基準でこれを行います:
115年未満に生まれた個人は、信頼できる情報源が個人の死亡を確認しない限り、このポリシーの対象となります。115歳以上の人は、最年長の人に記載されていない限り、死亡したと推定されます。
したがって、コードで現在の年を検索し、115を追加して、それをクレジットカードの有効期限の理論上の上限として使用します。そのコードに再度触れる必要はありません。
これは、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>
<?php
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
3桁の年2100+を生成しないソリューションが必要な場合は、日付をモジュロする必要があります。したがって、1桁の年を取得しないようにするには、xx00〜xx09年の先行ゼロを入力する必要があります。
これは2080年から非常に重要になります。
<?php
for($i=0;$i<=20;$i++){
$aktDate = sprintf("%02d", ((date('y')+$i)%100));
echo "<option value=\"{$aktDate}\">{$aktDate}</option>\n";
}
?>
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倍速くなり、元のコードのマイナーなバグに対処します。この場合、年は日付のフェッチごとに変更され、予期しない結果になりますが、この場合は無害です。
アマゾンでの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
これにより、フォームから削除するこれらの新年のリクエストの数が大幅に減少しました。
よりスリムなバージョンのループは、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>
<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>