ФорумПрограммированиеПыхнуть хотите?Готовые решения → Генератор паролей

Генератор паролей

  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 1 марта 2008 г. 17:18


    <?php
    /** Буквы нижнего регистра */
    define("PASSGEN_LOWER", 1);
    /** Буквы верхнего регистра */
    define("PASSGEN_UPPER", 2);
    /** Все буквы */
    define("PASSGEN_LETTER", 3);
    /** Цифры */
    define("PASSGEN_NUMERIC", 4);
    /** Специальные символы */
    define("PASSGEN_SPECIAL", 8);
    /** Все символы */
    define("PASSGEN_ALL", 15);

    /**
    * Генератор паролей
    *
    * Для указания типа пороля используются константы с префиксом 'PASSGEN_'.<br />
    * Для использования нескольких типов необходимо использовать побитовые операторы.<br />
    * Например, для использования букв нижнего регистра и цифр
    * необходимо передать значение параметра 'PASSGEN_LOWER | PASSGEN_NUMERIC'.<br />
    * Если необходимо исключить тип, например специальные символы,
    * то необходимо передать параметр вида 'PASSGEN_ALL ^ PASSGEN_SPECIAL'
    * Третий параметр определяет, будет ли пароль состоять из уникальных,
    * т.е. не повторяющихся символов.<br />
    * Функция возаращает строку с паролем, либо значение false в случае неудачи.<br />
    * Изменения версии 1.01:<br />
    * - Передалн алгоритм добавления цифр;<br />
    * - исправлен баг, из-а которого неверно определялась длинна массива и возвращаемый
    * пароль мог иметь меньшую длинну.
    *
    * @version 1.01
    * @author KENDO-=713=- <kendo713 at mail dot ru>
    * @param integer $length длинна пароля
    * @param integer $type тип пароля
    * @param bool $unique пароль состоит из уникальных символов
    * @return string|bool
    */
    function pass_gen($length, $type=1, $unique=false) {
    if (!is_integer($length) or !is_integer($type) or $length<=0 or $type<1 or $type>15) {
    trigger_error('pass_gen() [<a href="function.pass_gen">function.pass_gen</a>]: Bad arguments.', E_USER_WARNING);
    return false;
    }
    $symb = array();
    if ($type & 1) {
    for ($i=97; $i<=122; $i++) {
    $symb[] = chr($i);
    }
    }
    if ($type & 2) {
    for ($i=65; $i<=90; $i++) {
    $symb[] = chr($i);
    }
    }
    if ($type & 4) {
    for ($i=0; $i<=9; $i++) {
    $symb[] = $i;
    }
    }
    if ($type & 8) {
    for ($i=33; $i<=47; $i++) {
    $symb[] = chr($i);
    }
    for ($i=58; $i<=64; $i++) {
    $symb[] = chr($i);
    }
    for ($i=91; $i<=96; $i++) {
    $symb[] = chr($i);
    }
    for ($i=123; $i<=126; $i++) {
    $symb[] = chr($i);
    }
    }
    shuffle($symb);
    $count = count($symb)-1;
    if ($unique == true and $length>$count) {
    trigger_error('pass_gen() [<a href="function.pass_gen">function.pass_gen</a>]: Too long length.', E_USER_WARNING);
    return false;
    }
    $password = "";
    for ($i=0; $i<$length; $i++) {
    if ($unique == true) {
    $password .= array_shift($symb);
    } else {
    $password .= $symb[rand(0, $count)];
    }
    }
    return $password;
    }
    ?>
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 1 марта 2008 г. 17:37, спустя 18 минут 47 секунд

    Пожалуй, единственное место, где коряво получилось это строка 42. А именно, функция range() возвращает массив, что я не учел при написании кода, и в результате пришлось переносить этот блок в начало функции, иначе получался вложенный массив.
  • kendo

    Сообщения: 446 Репутация: N Группа: Адекваты

    Spritz 9 марта 2008 г. 11:01, спустя 7 дней 16 часов 24 минуты

    Немного исправил скрипт. Изменения в тексте комментария.
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 9 марта 2008 г. 16:35, спустя 5 часов 33 минуты 51 секунду

    Че то мудят генерируют


    $long = 6;
    print substr(base64_encode(md5(base64_encode(time()).time())),0,$long);


    xDD

Пожалуйста, авторизуйтесь, чтобы написать комментарий!