PHP随机生成不重复的8位卡号(数字)和卡密(字符串)

一、生成不重复的随机数字,可自定义长度(最多支持10位数

 1 /**
 2  * 生成不重复的随机数字(不能超过10位数,否则while循环陷入死循环)
 3  * @param  int $start 需要生成的数字开始范围
 4  * @param  int $end 结束范围
 5  * @param  int $length 需要生成的随机数个数
 6  * @return number      生成的随机数
 7  */
 8 function getRandNumber($start = 0, $end = 9, $length = 8)
 9 {
10     //初始化变量为0
11     $count = 0;
12     //建一个新数组
13     $temp = array();
14     while ($count < $length) {
15         //在一定范围内随机生成一个数放入数组中
16         $temp[] = mt_rand($start, $end);
17         //$data = array_unique($temp);
18         //去除数组中的重复值用了“翻翻法”,就是用array_flip()把数组的key和value交换两次。这种做法比用 array_unique() 快得多。
19         $data = array_flip(array_flip($temp));
20         //将数组的数量存入变量count中
21         $count = count($data);
22     }
23     //为数组赋予新的键名
24     shuffle($data);
25     //数组转字符串
26     $str = implode(",", $data);
27     //替换掉逗号
28     $number = str_replace(',', '', $str);
29     return $number;
30 }
31 
32 echo getRandNumber(0, 9, 8)."<br/>";

二、随机生成不重复的8位卡密

 1 //随机生成不重复的8位卡密
 2 function makeCardPassword()
 3 {
 4     $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 5     $rand = $code[rand(0, 25)]
 6         . strtoupper(dechex(date('m')))
 7         . date('d') . substr(time(), -5)
 8         . substr(microtime(), 2, 5)
 9         . sprintf('%02d', rand(0, 99));
10     for (
11         $a = md5($rand, true),
12         $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
13         $d = '',
14         $f = 0;
15         $f < 8;
16         $g = ord($a[$f]),
17         $d .= $s[($g ^ ord($a[$f + 8])) - $g & 0x1F],
18         $f++
19     ) ;
20     return $d;
21 }
22 
23 echo makeCardPassword();

链接:https://www.php.cn/php-weizijiaocheng-437582.html(文章有坑,生成不重复的随机数字,可自定义长度没有提示最多只支持10数

原文地址:https://www.cnblogs.com/clubs/p/12009769.html