Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

クレジットカード情報の入力時になぜ有効期限も入れなければならないのか?

ネットでクレジットカード払いをする際、カード番号以外に有効期限も入力が求められます。これはなぜなのか疑問になりませんか?疑問になりますよね。 今回はそれについて考えてみました(完全に推測で書いてます)

abst (created by ChatGPT)

クレジットカード情報の入力に有効期限が必要な理由は、同じ番号のカードが複数枚存在する可能性があるためです。カード番号だけでは一意性が保証されず、有効期限を組み合わせることでセキュリティコードが一意に定まります。これにより、過去のセキュリティコードを再利用してしまう問題を防ぎます。したがって、有効期限の入力が求められるのです。

結論: 同じ番号のカードが同時に複数枚存在する可能性があるから

カード番号がもしユニークであれば、カード番号と有効期限は1対1で紐づきます。これならカード番号だけ入力してもらえば問題ありません。データベースから有効期限情報は引っ張ってこれるので。しかし、実際にはカードは有効期限が切れそうになると別のカードが送られてきます。そのため、そもそもカード番号と有効期限情報は1対1で対応してません。

また、ほかにもセキュリティコードの問題もあります。たとえば1000回カードを更新したとします。次に発行するカードのセキュリティコードはなににすればよいでしょうか?もし過去に使ったセキュリティコードを設定すると、過去にそのセキュリティコードで登録してたサービスが再びカード支払いできるようになってしまいます。

  • 4980-1234-5678-9012 123 でサービスAに登録していたとする (有効期限は入力してない)
  • 有効期限だけ異なりセキュリティコードが同じ 4980-1234-5678-9012 02/ 123 が発行されたとする
  • サービスAでカード支払いができてしまう

つまり、あるカード番号に紐づくセキュリティコードが複数あるのが問題なのです。コレに対して、カード番号+有効期限であればセキュリティコードは1つに定まります。

まとめ: カード番号のみでは主キーになり得ない

セキュリティコードを参照する際にカード番号のみだと複数枚あるときがあるので問題が発生する→カード番号+有効期限ならセキュリティコードが一意に定まる。だから有効期限も必要なんですね