2012-02-17 173 views
2

我期待根據我擁有的產品數量生成隨機字符串。例如,我有100個名爲「測試」的產品,我希望能夠生成100個產品代碼,這些產品代碼都是唯一的。php中的隨機字符串列表

我目前使用此代碼:

<?php 
/** 
* The letter l (lowercase L) and the number 1 
* have been removed, as they can be mistaken 
* for each other. 
*/ 

function createRandomPassword() { 
    $chars = "abcdefghijkmnopqrstuvwxyz023456789"; 
    srand((double)microtime()*1000000); 
    $i = 0; 
    $pass = '' ; 
    while ($i <= 7) { 
     $num = rand() % 33; 
     $tmp = substr($chars, $num, 1); 
     $pass = $pass . $tmp; 
     $i++; 
    } 
    return $pass; 
} 
// Usage 
$password = createRandomPassword(); 
echo "Your random password is: $password"; 
?> 

乾杯

+4

那麼...你的問題是什麼? – Mike 2012-02-17 18:18:14

+1

您需要在某個時間點引用創建的日期時間。您的隨機數字和使用模數不能保證返回一個唯一的值。 – Smamatti 2012-02-17 18:20:16

+1

值得注意的是rand()對於隨機整數是個不錯的選擇 - 查看'mt_rand()'來代替更好的隨機性。另外,看到你刪除l和1,看看只是使用base58 - 這是相似的,但也出於可讀性原因刪除o和0。 – damianb 2012-02-17 23:28:27

回答

1

已經有一個內置的函數,將平凡的您處理該問題。 uniqid根據當前時間生成一個前綴唯一標識符(以微秒爲單位)。

http://php.net/manual/en/function.uniqid.php

<?php 
// loop 100 times 
for ($i=0; $i<100; $i++) 
{ 
    // print the uniqid based on 'test' 
    echo uniqid('test', true); 
} 
?> 

值得注意的是,要確保真正的獨特性,你將需要存儲所產生的所有代碼並確認是否有重複發放。

+0

嗨弗雷澤,這正是我所需要的,但不幸的是,這意味着我不得不迴應出我想要的很多次。在那附近嗎? – danyo 2012-02-21 15:57:26

+0

謝謝弗雷澤。無論如何要定製有多少個字符被回顯出來? – danyo 2012-02-21 16:57:57

+0

並不會影響結果的唯一性。您可以將more_entropy參數設置爲false,或者將其忽略,這會縮短它們。 echo uniqid('test'); – Fraser 2012-02-21 19:16:43

2

使用您的功能,您可以生成100個隨機字符串,即

$product_names = array(); 
for ($i=0; $i < 10; $i++) 
    $product_names[] = "code-" . createRandomPassword(); 

print_r ($product_names); 

你的問題不明確,但。你有沒有一個你想要遵循的命名約定,你是否想要在一個模式中生成代碼,比如'product1','product2',...,'product100'等等?

編輯:上面的代碼創建以下的輸出:

Array 
(
    [0] => code-opt6ggji 
    [1] => code-4qfjt653 
    [2] => code-8ky4xxo0 
    [3] => code-dfip2o5x 
    [4] => code-3e3irymv 
    [5] => code-dgqk0rzt 
    [6] => code-3fbeq0gr 
    [7] => code-tev7fbwo 
    [8] => code-idg04mdm 
    [9] => code-8c2uuvsj 
) 
+0

梅利莎 - 我想生成100個完全隨機的代碼,但都是以「code-」開頭,然後是隨機字符。 – danyo 2012-02-20 18:05:54

+0

'$ product_names [] =「code-」。 createRandomPassword();」 – Ryan 2012-02-20 18:21:38

+0

梅麗莎 - 我已經實現了你的代碼,但數組返回空?有任何想法嗎? – danyo 2012-02-21 11:38:18