<?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;
}
?>
Форум → Программирование → Пыхнуть хотите? → Готовые решения → Генератор паролей
Генератор паролей
-
-
1 марта 2008 г. 14:37, спустя 18 минут 47 секунд
Пожалуй, единственное место, где коряво получилось это строка 42. А именно, функция range() возвращает массив, что я не учел при написании кода, и в результате пришлось переносить этот блок в начало функции, иначе получался вложенный массив. -
9 марта 2008 г. 8:01, спустя 7 дней 16 часов 24 минуты
Немного исправил скрипт. Изменения в тексте комментария. -
9 марта 2008 г. 13:35, спустя 5 часов 33 минуты 51 секунду
Че то мудят генерируют
$long = 6;
print substr(base64_encode(md5(base64_encode(time()).time())),0,$long);
xDD
Пожалуйста, авторизуйтесь, чтобы написать комментарий!