Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Генерация случайной строки
Форумы портала PHP.SU » PHP » Пользовательские функции » Генерация случайной строки

Страниц (1): [1]
 

1. improbable - 15 Июня, 2013 - 00:45:44 - перейти к сообщению
Моё решение генерации случайной строки из трёх настраиваемых групп символов (большие и маленькие буквы, символы). По умолчанию всех по 26, поэтому содержание элементов каждой группы в строке ~ равно. Можно генерировать строку с неповторяющимися символами (по умолчанию).

PHP:
скопировать код в буфер обмена
  1. function rand_string (
  2.  
  3.         $length = 8, # Желаемая длина строки
  4.         $repeat = false, # Разрешить повторение символов
  5.         $UpperCase = true, # Использовать большие буквы - Используйте только boolean тип при вызове!
  6.         $LowerCase = true, # Использовать маленькие буквы - Используйте только boolean тип при вызове!
  7.         $Symbols = true, # Использовать символы - Используйте только boolean тип при вызове!
  8.         $SymbolsList__ = '~!#$%^&*()0123456789_+=?,.', # Символы
  9.         $UpperCaseList = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', # Большие буквы
  10.         $LowerCaseList = 'abcdefghijklmnopqrstuvwxyz' # Маленькие буквы
  11.  
  12. ) {
  13.  
  14. if ($UpperCase) {
  15.  
  16.         $UpperCase = $UpperCaseList;
  17.  
  18. }
  19.  
  20. if ($LowerCase) {
  21.  
  22.         $LowerCase = $LowerCaseList;
  23.  
  24. }
  25.  
  26. if ($Symbols) {
  27.  
  28.         $Symbols = $SymbolsList__;
  29. }
  30.  
  31. unset ($UpperCaseList, $LowerCaseList, $SymbolsList__);
  32.  
  33.         /* Объединяет большие и маленькие буквы с символами в одну строку, случайно определяя очерёдность их в ней. */
  34.  
  35.         switch (rand(0, 5)) {
  36.        
  37.                 case 0:
  38.                         $All = $UpperCase. $LowerCase . $Symbols;
  39.                 case 1:
  40.                         $All = $UpperCase. $Symbols . $LowerCase;
  41.                 case 2:
  42.                         $All = $Symbols . $LowerCase .$UpperCase;
  43.                 case 3:
  44.                         $All = $Symbols . $UpperCase . $LowerCase;
  45.                 case 4:
  46.                         $All = $LowerCase .$Symbols . $UpperCase;
  47.                 case 5:
  48.                         $All = $LowerCase . $UpperCase . $Symbols;
  49.                        
  50.         }
  51.        
  52. unset ($UpperCase, $LowerCase, $Symbols);
  53.                
  54.         $totalLength = strlen($All) - 1;
  55.        
  56.         if (!$repeat) {
  57.        
  58.                 $totalLength++;
  59.        
  60.                 if($length > $totalLength) {
  61.                
  62.                 #       echo "Error while generating the string: the maximum length is exceeded ($length instead of $totalLength characters)";
  63.                         return false;
  64.  
  65.                 }
  66.                
  67.                 $totalLength--;
  68.  
  69.                 while ($i++ < $length) {
  70.                
  71.                         $Current = $All{rand(0, $totalLength--)};
  72.                         $All = str_replace($Current, '', $All);
  73.                         $string .= $Current;
  74.                        
  75.                 }
  76.                
  77.         } else {
  78.        
  79.                 while ($i++ < $length) {
  80.                
  81.                         $string .= $All{rand(0, $totalLength)};
  82.                        
  83.                 }
  84.                     }
  85.  
  86.                 unset ($All, $i, $length, $totalLength, $repeat);
  87.                 return $string;
  88.        
  89. }
2. LIME - 15 Июня, 2013 - 00:57:03 - перейти к сообщению
а че так дофига кода для простого рандома?
3. Crate - 15 Июня, 2013 - 09:56:57 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         function generate ($length = 64) {
  3.                 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  4.                 $result = '';
  5.                 for ($i = 0; $i <= $length; $i++) {
  6.                         $result .= $characters[mt_rand (0, strlen ($characters) - 1)];
  7.                 }
  8.                 return $result;
  9.         }
  10. ?>

Гист
4. improbable - 15 Июня, 2013 - 22:30:36 - перейти к сообщению
Crate пишет:
Спойлер (Отобразить)
Гист

Выпендрился, молодец. Теперь покажи мне, как эта функция сгенерирует только большие буквы или только маленькие буквы, или только символы. А потом покажи, как она сгенерирует их без повторяющихся символов-букв. А потом покажешь, как она у тебя поддерживает ввод пользовательских параметров, например, как с помощью неё сделать рандомную строку их русских неповторяющихся букв. А ещё посчитай, что в твоей строке 10 чисел, 26 больших и 26 маленьких букв. Процент содержания чисел в строке будет примерно равен 16-ти. В моей функции есть возможность изменить лист символов при вызове, и сделать так, чтобы количество символов, больших и маленьких букв, было 1 к 1. Выпендрился?
(Добавление)
improbable пишет:

кто так делает в цикле?
(Добавление)
LIME пишет:
а че так дофига кода для простого рандома?

сделай лучше) Подмигивание
5. AlexAnder - 15 Июня, 2013 - 22:47:23 - перейти к сообщению
к чему вообще эта тема?
чтобы только
improbable пишет:
Выпендриться
6. DeepVarvar - 15 Июня, 2013 - 22:50:10 - перейти к сообщению

improbablissimo!
7. LIME - 16 Июня, 2013 - 00:46:26 - перейти к сообщению
Да...получилась очень универсальная и очень бесполезная фигня
8. DelphinPRO - 16 Июня, 2013 - 03:16:24 - перейти к сообщению
LIME пишет:
Да...получилась очень универсальная и очень бесполезная фигня
в точку! Улыбка

 

Powered by ExBB FM 1.0 RC1