random

Тема в разделе ".:: Готовые решения", создана пользователем Slayter, 24 ноя 2007.

Статус темы:
Закрыта.
  1. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    PHP:
    <?php
    class random {

         private 
    $symbols;
         public  
    $result;
         
         public function 
    __construct() {
             
    $this->symbols 'qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP';
             
    $this->result  null;
         }
         
         public function 
    make$max )
         {
                
    $size      strlen($this->symbols)-1;
                while (
    $max 0) {
                    
    $this->result .= $this->symbols[rand(0,$size)]; 
                    
    $max--;
                }
                return 
    $this->result;
         }

    }
    ?>
    Examples:
    PHP:
    <?php
    $random 
    = new random();
    echo 
    '6 random characters: ' $random->make();
    echo 
    '50 random characters: ' $random->make(50);
    ?>
     
  2. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    что то мне подсказывает что должно быть так
    PHP:
    <?php
    $random 
    = new random();
    echo 
    '6 random characters: ' $random->make(6);
    echo 
    '50 random characters: ' $random->make(50);
    ?>
    ,а не так
    хотя может я не прав... заранее извияюсь)
     
  3. Slayter

    Slayter

    Регистр.:
    8 апр 2006
    Сообщения:
    232
    Симпатии:
    52
    ты не прав. извинения приняты :)
     
  4. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Juri, было бы неплохо чуток подучить синтаксис функций php. Если очень не хочется шастать по просторам, то вот:

    PHP:
    <?php
     
    function foo($param 'Null')
    { if(
    $param == 'Null') {echo 'Без параметров';}
       else { echo 
    'Параметр уазан и равен '.$param;}
    }

    // Запуск функции
    foo();
    foo('some parameter');
    ?>
    Вот запусти и посмотри =)
     
  5. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    что я делаю не так?

    PHP:
    print implode("",array_rand(array_flip(array_merge(range("A","z"),range("0","9"))),5));
    5 - соотв кол-во элементов, если хотите шанс на повторение чисел/цифр, через запятую надо повторить range("A","z")
     
    roddik нравится это.
  6. roddik

    roddik Колбаска

    Регистр.:
    26 янв 2007
    Сообщения:
    351
    Симпатии:
    285
    medvoodoo:ay:
    формально в первом посте было меньше вариантов символов

    print_r(range("A","z"));
    [23] => X
    [24] => Y
    [25] => Z
    [26] => [
    [27] => \
    [28] => ]
    [29] => ^
    [30] => _
    [31] => `

    [32] => a
    [33] => b
    [34] => c
    [35] => d

    хотя в общем, согласен, ТС еще учиться и учиться
     
  7. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Ещё один вариант для range :
    PHP:
    $range preg_replace('/[_\[\]\^`\x5c]/','',implode('',range('A','z')));
     
  8. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    admLoki: range("A","Z"), range("a","z") все равно у меня в варианте они вместе собираются, прег работает чуть медленнее хотя тоже интересно.

    Символы 26-31 в коде не стал убирать т.к. я так понял это модуль для генерации паролей.
     
  9. Jeurey

    Jeurey

    Регистр.:
    13 сен 2006
    Сообщения:
    419
    Симпатии:
    576
    Вот мой класс генерации рандомной строки (подойдет как для генерации паролей, так и для генерации символов капчей)
    PHP:
    <?php
        
    class rndstring_generator
        
    {
            private 
    $symbols_count;
            private 
    $chars;                // array of symbols to generate
            
    private $eng;
            private 
    $num;
            public  
    $rnd_str;            // random string
            
            
    public function __construct($symbols_count=6)
            {    
    $this->chars = array();
                
    $this->symbols_count $symbols_count;
                
    $this->eng     range('a','z');
                
    $this->num    range(0,9);
                
    $this->rnd_str '';
            }
            
            
            
    # $chars_case     [none|lower|upper]
            # $chars_group     [eng|num]
            
    public function _add_chars($chars_group,$chars_case='none')
            {    
    $this->chars $this->merge($this->chars$this->$chars_group$chars_case);
            }
            
            
            private function 
    merge($arr1,$arr2,$case)
            {    
                if(
    $case == 'lower' || $case == 'none' || $case == 'all')
                {    foreach (
    $arr2 as $key=>$value)
                    {        
    $arr1[] = $value;
                    }
                }
                
                if (
    $case == 'upper' || $case == 'all')  
                {    foreach (
    $arr2 as $key=>$value)
                    {        
    $arr1[] = strtoupper($value);
                    }
                }
                return 
    $arr1;
            }
            
            public function 
    generate()
            {    
                
    $i 0;
                while (
    $i<$this->symbols_count)
                {    
    $this->rnd_str.= $this->rnd_char();
                    
    $i++;
                }
            }
            private function 
    rnd_char()
            {    
    $rnd_key array_rand(&$this->chars);
                return 
    $this->chars[$rnd_key];
            }
        }
    ?>
    Использование
    PHP:
    <?php
        $password_len 
    6;
        
    $rnd_str = new rndstring_generator($password_len);
        
    $rnd_str->_add_chars('eng','all');
        
    $rnd_str->_add_chars('num','none');
        
    $rnd_str->generate();
                
        echo 
    $rnd_str->rnd_str;
    ?>
    Можно расширить алфавит спецсимолами, русскими буквами (без использования range, ибо не понимает он русские символы).
    Плюс перед первым вариантом заключается в выборе кейса и набора символов.
     
  10. medvoodoo

    medvoodoo Постоялец

    Регистр.:
    28 мар 2007
    Сообщения:
    89
    Симпатии:
    19
    Э, простите я не понял, зачем делать мега класс когда весь рендеринг можно уложить в одну строчку, для наглядности разнес на две.
    PHP:
    /**
    * Одномерный массив определяющий набор символов в 
    * результирующей строке
    *@var array(char)
    */
    $arrayS array_merge(array("Б","Е"),range("A","z"),range("0","9"));
    $result implode("",array_rand(array_flip($arrayS),5));
    Быстродействие выше.
     
Статус темы:
Закрыта.