一、生成不重復的隨機數字,可自定義長度(最多支持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數)