さまざまなオンラインサービスは、クレジットカードに関しては、最大有効期限の値が異なります。
例えば:
ここで合理的な最大値は何ですか?公式のガイドラインはありますか?
クレジットカードの発行者は、発行するカードの有効期限が切れるときにそれぞれを選択できるため、公式のガイドラインはありません。実際、彼らはますます長い期間カードを発行してきました。有効期限をどのくらい先まで考慮すべきかを判断しようとしている場合は、安全面を考慮して、顧客に何年も選択してもらいます。そうすれば、アプリケーションを将来的に証明できます。
参考までに、多くのクレジットカード発行会社は、クレジットカードの購入を承認するかどうかを決定する際に有効期限を使用しません。誤った日付が提供されることを心配している場合、プロセッサは最終的にトランザクションが承認されたかどうかについて最終決定権を持っているので、私はそれについて心配しません。
2017年7月:ちょうど50年後に有効期限が切れるカードを持ったエンドユーザーがいました。
現在の日付の年に動的に+ 15-20年を追加しますOR年のテキストボックス入力を提供します(個人的には、リストをスクロールするよりも2桁を入力する方が速い年の)。
理論上の上限として、カード所有者の予想寿命を超えて考慮する必要はないことを提案します。ウィキペディアは 生きている人の伝記 の編集基準でこれを行っています。
信頼できる情報源が個人の死を確認しない限り、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>
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倍高速であり、元のコードのマイナーバグにも対処します。これにより、年が日付の取得から次の取得に変わる可能性があり、この場合、予期しない結果になりますが、無害です。
いいですね、@ 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>