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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Генерация случайной строки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
improbable
Отправлено: 15 Июня, 2013 - 00:45:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




Моё решение генерации случайной строки из трёх настраиваемых групп символов (большие и маленькие буквы, символы). По умолчанию всех по 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. }
 
 Top
LIME
Отправлено: 15 Июня, 2013 - 00:57:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а че так дофига кода для простого рандома?
 
 Top
Crate
Отправлено: 15 Июня, 2013 - 09:56:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 312
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




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. ?>

Гист

(Отредактировано автором: 15 Июня, 2013 - 09:57:19)

 
 Top
improbable
Отправлено: 15 Июня, 2013 - 22:30:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 139
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




Crate пишет:
Спойлер (Отобразить)
Гист

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

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

сделай лучше) Подмигивание
 
 Top
AlexAnder
Отправлено: 15 Июня, 2013 - 22:47:23
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




к чему вообще эта тема?
чтобы только
improbable пишет:
Выпендриться


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
DeepVarvar Супермодератор
Отправлено: 15 Июня, 2013 - 22:50:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)





improbablissimo!
 
 Top
LIME
Отправлено: 16 Июня, 2013 - 00:46:26
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Да...получилась очень универсальная и очень бесполезная фигня
 
 Top
DelphinPRO
Отправлено: 16 Июня, 2013 - 03:16:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




LIME пишет:
Да...получилась очень универсальная и очень бесполезная фигня
в точку! Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB