2012-01-24 5 views
2

Для генерации случайной строки я написал такой код, но если функция вызывается с отрицательным значением или равна нулю, или 1 миллион, это создаст много проблем. Поэтому, пожалуйста, предложите мне лучший код.Создайте случайную строку PHP

/* 
* The following function is for generating a random string value. 
* @param unknown_type $length 
* @return string $randString 
*/ 
function generateRandomString($length) { 
    $randString = ""; 
    srand(); 
    $characters = "abcdefghijklmnopqrstuvwxyz1234567890"; 
    /* 
    * build string of random characters 
    */ 
    while(strlen($randString) < $length) { 
     $randString .= substr($characters, rand() % (strlen($characters)),1); 
    } 
return $randString; 
} 
+0

ли смысл прохождение -2 или 0, я думаю, что прохождение 10 будет достаточно! –

ответ

1

Чтобы остановить отрицательное число или ноль, как аргумент как проблему, вы можете использовать max(1, $length). В качестве альтернативы, проверьте на < 1 и выбросьте исключение или верните FALSE.

Поэтому, пожалуйста, предложите мне лучший код.

Вот некоторые предложения для вашего кода ...

function generateRandomString($length) { 
    $chars = array_merge(range('a', 'z'), range(0, 9)); 
    shuffle($chars); 
    return implode(array_slice($chars, 0, $length)); 
} 

CodePad.

Обратите внимание, что это не будет иметь одного и того же символа дважды в результирующей строке.

Если вы желаете, что вы могли бы использовать что-то вроде ...

function generateRandomString($length) { 
    $chars = array_merge(range('a', 'z'), range(0, 9)); 

    return array_reduce(array_rand($chars, $length), function($str, $key) use ($chars) { 
     return $str.= $chars[$key]; 
    }, ''); 

} 

CodePad.

... или немного отличается ...

function generateRandomString($length) { 
    $chars = array_merge(range('a', 'z'), range(0, 9)); 

    return implode(array_map(function($key) use ($chars) { 
     return $chars[$key]; 
    }, array_rand($chars, $length))); 

} 

CodePad.

+0

Кажется, что новая мода в php - анонимные функции;) хотя код с 'while' выглядит яснее – meze

+0

Большое спасибо. – vvr

0

Если только беспокойство устанавливают ограничения на длину, то вы можете просто установить свою собственную длину, если ваш minimmum составляет 5, а $ длины <-вы просто установить его на 5, если не более 30 вы можете установить его до 30, если это> 30 ... видите?

Что это? Гораздо лучший способ генерации случайной строки цифр, которая всегда будет длиной 32 символа, - это получить md5 из текущей метки времени. Разумеется, это не обязательно будет уникальным, если два пользователя вызовут код в тот же момент, но без дополнительной информации о том, что вы делаете, я бы рассмотрел этот подход.

0

Вы можете проверить правильность значения длины. Если указанная длина не является практикой, вы должны ее сбросить.

function generateRandomString($length) 
{ 
    if($length < 1 || $length > 50) 
    { 
     $length = 25;  
    } 

    // do the rest here... 
} 
+0

Тихая замена длины может сбить с толку. – alex

0
/* 
    * The following function is for generating a random string value. 
    * @param unknown_type $length 
    * @return string $randString 
    */ 
    function generateRandomString($length) { 
     $valueCheck = 99999999;    
     $length = ($length<0)?-$length:$length; 
     $length = ($length==0)?rand(0,$valueCheck):$length; 
     $length = ($length>$valueCheck)?rand(0,$valueCheck):$length; 
     $randString = ""; 
     srand(); 
     $characters = "abcdefghijklmnopqrstuvwxyz1234567890"; 
     /* 
     * build string of random characters 
     */ 
     while(strlen($randString) < $length) { 
      $randString .= substr($characters, rand() % (strlen($characters)),1); 
     } 
    return $randString; 
    } 
Смежные вопросы