php不重復隨機數
『壹』 php 生成不重復隨機數(組)的幾種方法
您好,很高興回答您的問題
$numbers=range(1,50);
//將數組順序隨機打亂
shuffle($numbers);
//取該數組中的某一段
$result=array_slice($numbers,0,6);
print_r($result);
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
『貳』 php 生成多個(比如1w個)不重復的12位隨機數,請教!
一般來說你一次搞這么多隨機數,每次單獨隨機排重,1w個隨機數弄下來效率就不行了,比較隨機函數演算法還是效率不是很高;
我感覺最簡單做法,先弄好12位按順序生成大數組,第一種就是array_rand
隨機取,第二種就是把12打亂,然後用array_slice取1萬條;你這個問題我關注一下,看看其他有沒有好辦法。
『叄』 php怎麼生成6位隨機數,php隨機數例子
通常情況下,當我們要生成一個隨機字元串時,總是先創建一個字元池,然後用一個循環和mt_rand()或rand()生成php隨機數,從字元池中隨機選取字元,最後拼湊出需要的長度。代碼如下:
function randomkeys($length)
{
$pattern = '
ABCDEFGHIJKLOMNOPQRSTUVWXYZ,./&l
t;>?;#:@~[]{}-_=+)(*&^%___FCKpd___0pound;"!'; //字元池
for($i=0;$i<$length;$i++)
{
$key .= $pattern{mt_rand(0,35)}; //生成php隨機數
}
return $key;
}
echo randomkeys(8);
這個php隨機函數能生成XC*=z~7L這樣的字元串,隨機!
『肆』 如何用phpfor循環生成5位,數字字母組合,永不不重復
如果你希望永不重復 建議採用 PHP GUID
GUID是什麼
GUID: 即Globally Unique Identifier(全球唯一標識符) 也稱作 UUID(Universally Unique IDentifier) 。 GUID是一個通過特定演算法產生的二進制長度為128位的數字標識符,用於指示產品的唯一性。GUID 主要用於在擁有多個節點、多台計算機的網路或系統中,分配必須具有唯一性的標識符。
PHP中並不提供GUID的內部實現。為此我們可以自己寫演算法實現。代碼片段如下:
function create_guid() {
$charid = strtoupper(md5(uniqid(mt_rand(), true)));
$hyphen = chr(45);// "-"
$uuid = chr(123)// "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);// "}"
return $uuid;
}
『伍』 php隨機生成資料庫中不存在的且不重復數字,在線等!!!!!
說下思路:
1. 將生成的數字保存到mysql資料庫,然後每次生成的號碼不能與資料庫的數字重復,請問怎麼弄?
先讀取資料庫已存在的數字,將結果以數組格式,與rand(1,1000)的數組相比較計算差集,去除這部分數字(array_diff),再shuffle,得到新的隨機數。
我覺得,你完全可以建立一個序號表,比如,1-1000,每次用時先用隨機函數取(1-數據記錄數)個數值,再用這個數值取得相應的記錄,當取出之後,刪除這個記錄,這樣保證記錄總數一直會減少且數字也不會重復。
2. 有沒有什麼辦法生成的時候先生成一位數的,一位數生成滿了以後再生出兩位數的,兩位數滿瞭然後再三位數的,以此類推?
先獲取一位數的記錄,再從中隨機抽取一個,如果資料庫中沒有找到一位數的,就遞增一位數,直到找到為止。
3. 代碼的執行效率希望能越高越好!
如果想要代碼執行效率,最好盡量減少與資料庫的交互。
『陸』 PHP 如何隨機生成24位 MD5加密後的字元串
md5是32位的,所以你需要先生成md5,再進行字元串截取,截取24個長度就是24位了。
生成隨機的為了不重復,可以使用當前時間戳,在加上隨機數就行
$date_string = date('Y') . date('m') . date('d') . date('H') . date('i') . date('s') . mt_rand(100000, 999999);
$md5_string = md5($date_string);
$string = substr($md5_string, 0, 24);
echo $string;
『柒』 PHP程序 用隨機7位數字當用戶名 批量生成百個賬號 確保與資料庫中不重復,有什麼好的思路
確保不重復的情況下 給這個鍵做索引 或者 在匹配步驟上將資料庫的所有數值分批次取出存入到緩存中 利用高IO去完成匹配。
另外 關於 7位數字的生成 可以以1000000為基礎去自增的形式生成。按照你的隨機數理念 越到後面count的效率越低。
『捌』 php向一個空數組中添加1000個不重復的數字,要求:數字需要在0-3000中產的代碼
// 1、首先定義一個空的目標數組
$arr = [];
// 2、開始for循環
for ($i = 0; $i < 1000; ) {
****// 3、獲取0~3000之間的隨機數
****$r = rand(0, 3000);
****// 4、判斷該隨機數是否存在目標數組中
****if (!in_array($r, $arr)) {
********// 5、如果不存在,則將該隨機數添加到目標數組中
********$arr[] = $r;
********// 6、最關鍵的一步:只有向目標數組添加新值的時候才改變$i的值
********$i ++;
****}
****continue;
}
// 7、最後列印出目標數組,也可使用print_r函數
var_mp($arr);
die;
總結:該題的難點在於在什麼時候再改變計數器變數$i的值,只有數組元素新增的時候才能改變$i,使其加1,當然for循環體也可反向寫,也可採用別的循環結構,留給你自己發揮^>^。
希望能幫助到你,望採納,謝謝~