クレジットカードに関しては、さまざまなオンラインサービスの最大有効年数の値が異なります。
例えば:
- ベースキャンプ:+15年(2025)
- アマゾン:+20年(2030)
- Paypal:+19年(2029)
ここで妥当な最大値はいくつですか?公式ガイドラインはありますか?
クレジットカードに関しては、さまざまなオンラインサービスの最大有効年数の値が異なります。
例えば:
ここで妥当な最大値はいくつですか?公式ガイドラインはありますか?
回答:
クレジットカードの発行者は、発行するカードの有効期限が切れるときにそれぞれを選択できるため、公式のガイドラインはありません。実際、彼らはより長い間カードを発行してきました。有効期限に対応する必要がある将来の期間を決定しようとしている場合は、安全面を考慮して、顧客に何年も選択できるようにしてください。そうすれば、アプリケーションの将来の証明になります。
ちなみに、多くのクレジットカード発行会社は、クレジットカードの購入を承認するかどうかを決定するときに有効期限を使用しません。したがって、間違った日付が提供されるのではないかと心配している場合は、最終的にトランザクションが承認されるかどうかの最終決定権がプロセッサーにあるため、心配する必要はありません。
2017年7月:約50年後に有効期限が切れたカードを持つエンドユーザーがいた。
現在の日付の年に+ 15-20年を動的に追加するか、年のテキストボックス入力を提供します(個人的には、年のリストをスクロールするよりも2桁を入力する方が速いと思います)。
理論的な上限として、カード所有者の予想される寿命以上のものを考慮する必要がないことを提案します。ウィキペディアは、生きている人の伝記のための編集基準でこれを行います:
信頼できる情報源が個人の死亡を確認していない限り、115年未満前に生まれた個人はこのポリシーの対象になります。115歳以上の人は、最高齢者に記載されていない限り、死亡していると推定されます。
したがって、コードで現在の年を調べて115を加算し、それをクレジットカードの有効期限の理論上の上限として使用します。そのコードに再度触れる必要はありません。
max
...彼らは116になったら、最も古い人はフォームを使用念のために:[
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>
@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>
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倍高速であり、元のコードのマイナーなバグにも対処します。この場合、日付のフェッチから次のフェッチに予期せぬ結果につながる可能性がありますが、この場合は無害な結果になります。
<?php
$y = gmdate("Y");
$x = 20;
$max = ($y + $x);
while ($y <= $max) {
echo "<option value='$y'>$y</option>";
$y = $y + 1;
}
?>
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>
date('Y')
とdate('y')
各20回がかなり遅いことに気付いていますか?