PHP随机生成信用卡卡号的方法

5年以前  |  阅读数:853 次  |  编程语言:PHP 

本文实例讲述了PHP随机生成信用卡卡号的方法。分享给大家供大家参考。具体分析如下:

这段PHP代码根据信用卡卡号产生规则随机生成信用卡卡号,是可以通过验证的,仅供学习参考,请不要用于非法用途,否则后果自负。


    <?php
    /*
    PHP credit card number generator
    Copyright (C) 2006 Graham King graham@darkcoding.net
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    */
    $visaPrefixList[] = "4539";
    $visaPrefixList[] = "4556";
    $visaPrefixList[] = "4916";
    $visaPrefixList[] = "4532";
    $visaPrefixList[] = "4929";
    $visaPrefixList[] = "40240071";
    $visaPrefixList[] = "4485";
    $visaPrefixList[] = "4716";
    $visaPrefixList[] = "4";
    $mastercardPrefixList[] = "51";
    $mastercardPrefixList[] = "52";
    $mastercardPrefixList[] = "53";
    $mastercardPrefixList[] = "54";
    $mastercardPrefixList[] = "55";
    $amexPrefixList[] = "34";
    $amexPrefixList[] = "37";
    $discoverPrefixList[] = "6011";
    $dinersPrefixList[] = "300";
    $dinersPrefixList[] = "301";
    $dinersPrefixList[] = "302";
    $dinersPrefixList[] = "303";
    $dinersPrefixList[] = "36";
    $dinersPrefixList[] = "38";
    $enRoutePrefixList[] = "2014";
    $enRoutePrefixList[] = "2149";
    $jcbPrefixList[] = "35";
    $voyagerPrefixList[] = "8699";
    /*
    'prefix' is the start of the CC number as a string, any number of digits.
    'length' is the length of the CC number to generate. Typically 13 or 16
    */
    function completed_number($prefix, $length) {
      $ccnumber = $prefix;
      # generate digits
      while ( strlen($ccnumber) < ($length - 1) ) {
        $ccnumber .= rand(0,9);
      }
      # Calculate sum
      $sum = 0;
      $pos = 0;
      $reversedCCnumber = strrev( $ccnumber );
      while ( $pos < $length - 1 ) {
        $odd = $reversedCCnumber[ $pos ] * 2;
        if ( $odd > 9 ) {
          $odd -= 9;
        }
        $sum += $odd;
        if ( $pos != ($length - 2) ) {
          $sum += $reversedCCnumber[ $pos +1 ];
        }
        $pos += 2;
      }
      # Calculate check digit
      $checkdigit = (( floor($sum/10) + 1) * 10 - $sum) % 10;
      $ccnumber .= $checkdigit;
      return $ccnumber;
    }
    function credit_card_number($prefixList, $length, $howMany) {
      for ($i = 0; $i < $howMany; $i++) {
        $ccnumber = $prefixList[ array_rand($prefixList) ];
        $result[] = completed_number($ccnumber, $length);
      }
      return $result;
    }
    function output($title, $numbers) {
      $result[] = "<div class='creditCardNumbers'>";
      $result[] = "<h3>$title</h3>";
      $result[] = implode('<br />', $numbers);
      $result[]= '</div>';
      return implode('<br />', $result);
    }
    #
    # Main
    #
    echo "<div class='creditCardSet'>";
    $mastercard = credit_card_number($mastercardPrefixList, 16, 10);
    echo output("Mastercard", $mastercard);
    $visa16 = credit_card_number($visaPrefixList, 16, 10);
    echo output("VISA 16 digit", $visa16);
    echo "</div>";
    echo "<div class='creditCardSet'>";
    $visa13 = credit_card_number($visaPrefixList, 13, 5);
    echo output("VISA 13 digit", $visa13);
    $amex = credit_card_number($amexPrefixList, 15, 5);
    echo output("American Express", $amex);
    echo "</div>";
    # Minor cards
    echo "<div class='creditCardSet'>";
    $discover = credit_card_number($discoverPrefixList, 16, 3);
    echo output("Discover", $discover);
    $diners = credit_card_number($dinersPrefixList, 14, 3);
    echo output("Diners Club", $diners);
    echo "</div>";
    echo "<div class='creditCardSet'>";
    $enRoute = credit_card_number($enRoutePrefixList, 15, 3);
    echo output("enRoute", $enRoute);
    $jcb = credit_card_number($jcbPrefixList, 16, 3);
    echo output("JCB", $jcb);
    echo "</div>";
    echo "<div class='creditCardSet'>";
    $voyager = credit_card_number($voyagerPrefixList, 15, 3);
    echo output("Voyager", $voyager);
    echo "</div>";
    ?>

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例