メニュー

カード有効期限の読み方と月の末日までの扱い

カード有効期限は月と年が 2 桁ずつ印字され、その月の末日まで有効です。表示形式と保存形式の違い、入力欄を作るときの落とし穴、期限切れの判定方法を解説します。

公開日

  • 有効期限
  • 決済

カード有効期限は、カード表面に月と年がそれぞれ 2 桁で印字された、ごく短い情報です。しかしこの 2 桁ずつの数字には、月末まで有効という約束や、表示と保存で形式が変わるという事情が隠れています。この記事では、印字の読み方から、期限切れの判定、入力欄の作り方までを順に説明します。

月と年の 2 桁ずつで印字される

カード表面には、有効期限が月 2 桁と年 2 桁の並びとして印字されます。たとえば 9 月まで有効なカードであれば、月は 09、年は下 2 桁だけが示されます。年が 4 桁ではなく 2 桁である点に注意してください。利用者が年を 4 桁で入力してくる場面や、逆に 2 桁しか入力しない場面の両方が起こります。

年が 2 桁しかない理由は、印字スペースの制約と、カードの有効期間が数年程度であることにあります。ただし、内部で扱うときまで 2 桁にしておくと、世紀をまたぐ場面で解釈が曖昧になります。表示は 2 桁、保持は 4 桁、という役割分担を意識しておくと、後の混乱を避けられます。

なぜ月末まで有効なのか?

有効期限が 9 月と印字されているカードは、9 月 1 日に失効するのではなく、9 月 30 日いっぱいまで使えます。つまり期限として示されているのは日付ではなく月であり、その月の末日が実際の境界になります。

この約束は、月末の日数が月ごとに異なるという事実と組み合わさって、境界の判定を難しくします。2 月は 28 日か 29 日、4 月は 30 日、12 月は 31 日です。判定を「翌月の 1 日より前かどうか」という形で書けば、月末の日数を自分で数える必要がなくなります。この書き方が、境界を誤らないためのもっとも素直な方法です。

期限切れのカードはどうなるのか?

期限が過ぎたカードは、番号もコードも正しいまま使えなくなります。これはカードが偽物だからではなく、有効期間という別の条件を満たさなくなったためです。決済の要求は拒否され、利用者には再発行の案内が届くのが一般的です。

定期課金を設定している場合、この失効は静かに影響します。毎月の引き落としが成功していたのに、再発行の手続きが終わるまでの間に一部の決済だけが失敗する、という状況が起こります。利用者にとっては身に覚えのない失敗に見えるため、案内の文面が重要になります。期限が近いカードを登録している利用者には、早めに更新を促す仕組みがあると親切です。

定期課金では何が起きるか?

定期課金の失敗は、その時点で気づけるとは限りません。通知が届かなければ、利用者はサービスが止まってから初めて事態を知ります。運用側では、失敗の理由が期限切れなのか残高不足なのかを区別して扱うと、案内を適切に分けられます。

期限切れが理由であれば、利用者にできることは明確です。新しいカードの情報を登録し直すだけで、多くの場合その後の課金は再開します。一方、残高や与信が理由であれば、案内すべき内容はまったく変わります。この二つを同じ文面で処理すると、利用者は何をすればよいか分かりません。決済事業者からの応答には失敗の理由が含まれているので、それをそのまま案内に使うのではなく、利用者向けの言葉に置き換える作業が必要です。

入力欄で迷わせないための工夫

有効期限の入力欄は、小さな設計の差が使いやすさを大きく左右します。検討すべき点を挙げます。

  • 月と年を別々の欄にするか、ひとつの欄にまとめるか。まとめる場合は入力中の自動区切りがあると親切です。
  • 年の入力が 2 桁でも 4 桁でも受け付けられるようにする。印字は 2 桁なので、2 桁で打つ利用者が多数派になります。
  • 月として 1 から 12 以外の値が入ったときに、送信前に気づけるようにする。
  • 期限切れの値を入力したときに、その場で伝えるか、送信後に伝えるかを決めておく。

入力中の自動区切りは便利ですが、削除キーを押したときの挙動まで作り込まないと、かえって打ちにくくなります。余裕がなければ、区切りは入力後に整形するだけでも十分です。

開発者向け: 境界値と保存形式の判断

判定の実装では、まず値の形を整えます。月と年を数値として取り出し、年が 2 桁であれば世紀を補って 4 桁にします。補う規則は、現在の年から大きく離れない範囲に収まるように決めておくと安全です。そのうえで、期限の月の翌月 1 日と現在の日時を比較します。等しい場合は有効、翌月 1 日を過ぎていれば期限切れ、という形で境界を表現します。

テストとして必ず押さえたいのは次の値です。当月の期限。翌月の期限。先月の期限。12 月の期限と 1 月の期限の組み合わせ。閏年の 2 月。年をまたぐ比較。これらを用意しておけば、月末の日数や年またぎの誤りをほぼ検出できます。とくに紛らわしいのは、境界の直後と直前の対比です。

印字された期限 判定 注意点
今月 有効 末日いっぱいまで有効
翌月 有効 先の月として素直に通る
先月 期限切れ 月初ではなく月末が境界
12 月と 1 月の並び 年をまたぐ 2 桁の年の補完が誤ると崩れる
2 月 月末の日数が変わる 閏年の判定も必要

時刻の扱いにも注意が必要です。日付だけで比較すると、期限の当月の最終日に時刻の差で誤判定することがあります。

保存形式は用途で決めます。表示は月 2 桁と年 2 桁、内部では年月を表す 1 つの値として保持する、という分け方が扱いやすく、並べ替えや比較も容易になります。文字列のまま保持して大小比較すると、年が 2 桁のときに誤った結果を返します。テスト用のカードには任意の将来の年月を組み合わせて構いませんが、生成されるのは構造的に妥当なだけで実際には発行されていない番号です。実在のカードとして扱わないでください。表示と保存の切り分けは カード番号の構成 と同じ考え方で、コード側の事情は セキュリティコードの扱い にも通じます。手元で期限付きのテストデータが必要なときは テスト用クレジットカード番号生成 を利用してください。

次のステップ

自分の環境で、期限が今月のカードと先月のカードを 1 件ずつ用意し、判定が期待どおりに分かれるかを確かめてください。次に、年を 2 桁で入力した利用者が迷わないかを、実際の入力欄で試します。この二点を押さえるだけで、期限まわりの問い合わせは大きく減ります。

続けて読む

テスト用クレジットカード番号生成の関連記事