クレジットカード全般のバリデーション

カード番号、セキュリティコード、有効期限のバリデーションについて

PHP

// カード番号 if (! preg_match('/^(4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|^(?:2131|1800|35\d{3})\d{11}$)$/', $str)) { // エラー } // セキュリティコード(3~4桁の数字) if (! preg_match('/^[0-9]{3,4}\z/', $str)) { // エラー } // 有効期限(MMYY) if (! preg_match('/^([0-9]{2})([0-9]{2})\z/', $str, $matches)) { // エラー } else { $month = $matches[1]; $year = sprintf('20%s', $matches[2]); // 日付妥当性 if (! checkdate($month, 1, $year)) { // エラー } // 範囲 $expiration = mktime(0, 0, 0, $month, 1, $year); // 過去の場合 $today = mktime(0, 0, 0, date('m'), 1, date('Y')); if ($expiration < $today) { // エラー } // 未来の場合(有効期限は最長10年程度?) $future = mktime(0, 0, 0, date('m'), 1, date('Y') + 10); if ($expiration > $future) { // エラー } } // 名義(大文字半角アルファベット 姓名の間にスペース) if (! preg_match('/^[A-Z]+\s[A-Z]+\z/', $str)) { // エラー }

クレジットカード会社別のカード番号仕様

Finding or Verifying Credit Card Numbersを参照。

VISA
開始番号は4、全体で16桁(※古いカードの場合、13桁があり)

MasterCard
開始番号は51~55、全体で16桁

American Express
開始番号は34または37、全体で15桁

Diners Club
開始番号は300または305または36または38、全体で14桁

Discover
開始番号は6011または65、全体で16桁

JCB
開始番号は2131または1800、全体で15桁 または 開始番号は35、全体で16桁

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。
主にLAPP環境でPHPを書いています。
最近はjQueryをよく書いています。