Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Моя функция создания случайного пароля, Что написал неправильно? 
V
    Опции темы
InfMag
Дата 24.12.2007, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Вот функция:
Код

    function genpass($symbols=6, $numbers=1, $lowers=1, $uppers=1)
    {
        $chars = ''; $result = '';
        if ($numbers == 1) $chars .= '0123456789';
        if ($lowers == 1) $chars .= 'qwertyuiopasdfghjklzxcvbnm';
        if ($uppers == 1) $chars .= 'QWERTYUIOPASDFGHJKLZXCVBNM';
        for ($i=0; $i<$symbols; $i++) $result .= substr($chars, mt_rand(0,sizeof($chars)-1), 1);
        return $result;
    }

Когда запрашиваю просто echo genpass(); выдает - 000000
mt_rand(0,sizeof($chars)-1) - походу постоянно выдает 0, но почему?
PM   Вверх
skyboy
Дата 24.12.2007, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



по видимому, sizeof($chars) - 1 возвращает "0" или "-1".
попробуй вывести sizeof($chars). 
для строк есть strlen - попробуй её.
кроме того, до версии РНР 5, генератор mt_rand следует инициализировать при помощи mt_srand
PM MAIL   Вверх
MoLeX
Дата 24.12.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



InfMag мой вариант smile 
Код

$nabor = array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Q", "W", "R", "T", "Y", "P", "S", "D", "H", "K", "L", "Z", "X", "C", "V");
for($i=0; $i<mt_rand(5, 25); $i++)
{
    echo $nabor[mt_rand(0, count($nabor)-1)];    
}


Это сообщение отредактировал(а) MoLeX - 24.12.2007, 15:56


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
InfMag
Дата 24.12.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


…
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



skyboy, а почему следует через mt_srand() инициализировать и каким образом?

Добавлено через 4 минуты и 45 секунд
skyboy,        Версия PHP    4.4.7
Код

    function genpass($symbols=6, $numbers=1, $lowers=1, $uppers=1)
    {
        $chars = ''; $result = '';
        if ($numbers == 1) $chars .= '0123456789';
        if ($lowers == 1) $chars .= 'qwertyuiopasdfghjklzxcvbnm';
        if ($uppers == 1) $chars .= 'QWERTYUIOPASDFGHJKLZXCVBNM';
        for ($i=0; $i<$symbols; $i++) $result .= substr($chars, mt_rand(0,strlen($chars)-1), 1);
        return $result;
    }

Вот так прошло, через strlen()
+1
PM   Вверх
skyboy
Дата 24.12.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(InfMag @  24.12.2007,  15:46 Найти цитируемый пост)
 а почему следует через mt_srand() инициализировать и каким образом?

Цитата

Note: Начиная с PHP 4.2.0, больше нет необходимости инициализировать генератор случайных чисел функциями srand() или mt_srand(), поскольку теперь это происходит автоматически.

cмысл в том, что если бы инициализация была необходима, но не проводилась(т.е. для РНР версией до 4.2.0), то рпи разных запусках mt_rand выдавал бы одно и то же число(в пределах разных сессий). так как числа являются псевдослучайными, то последовательности при совпадающих значениях параметров будen совпадать. и без инициализации ты бы получал один и тот же набор чисел от запуска к запуску. но твоя версия РНР производит инициализацию автоматически проблем в этом отошении быть не должно.
PM MAIL   Вверх
Mal Hack
Дата 24.12.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Код
<?php

 function generate_pass( $m )
  {
   $pass = "";

   for( $i = 0 ; $i < $m ; $i++ )
    {
     $te = mt_rand( 48 , 122 );

     if( ( $te > 57 &&  $te < 65 ) || ( $te > 90 &&  $te < 97 ) )
      {  $te = $te - 9;  }

     $pass .= chr( $te );
    }

   return $pass;
  }

 print generate_pass( 32 );

?>

PM ICQ   Вверх
BASILIO
Дата 24.3.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



Жесть, народ, зачем так мучатся? =)

Код

$newpswd = substr(md5(time()),8,8);


 smile 
PM   Вверх
bars80080
Дата 24.3.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а затем, чтобы пароль был не просто случайным, а случайным в диапазоне определённых символов
либо только латиница,
либо латиница в нижнем регистре,
либо латиница и цифры

и т.д.
PM MAIL WWW   Вверх
BASILIO
Дата 24.3.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Koté-CAH
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 25.2.2008

Репутация: нет
Всего: нет



bars80080, 
логично, только вопрос, а оно надо? ;) Ту абракадабру что выдаёт мд5 спокойно можно под пароли юзать =)
PM   Вверх
bars80080
Дата 24.3.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



товарищ BASILIO, вы можете предсказать все возможные вероятности, в кот. вам потребуются генератор случайных паролей?

я вот к примеру сталкивался с тем, что нужно получить кодовое слово определённой длины, начинающееся исключительно с маленьких латинских букв, а дальше цифры и латиница в любом регистре

с помощью функции выше, можно это реализовать, а md5 поможет?

я уж не говорю о вставке кириллицы
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.