<?php
if
(@!
is_object
(
$passGen
) || !isset(
$passGen
)) {
$passGen
=
new
Password;
}
class
Password
{
protected
$uppercase_chars
;
protected
$lowercase_chars
;
protected
$number_chars
;
protected
$special_chars
;
protected
$extra_chars
;
protected
$chars
=
array
();
public
$length
;
public
$uppercase
;
public
$lowercase
;
public
$number
;
public
$special
;
public
$extra
;
function
Password(
$length
= 12)
{
$this
->length =
$length
;
$this
->configure(true, true, true, false, false);
}
function
configure(
$uppercase
= false,
$lowercase
= false,
$number
= false,
$special
= false,
$extra
= false
) {
$this
->chars =
array
();
$this
->upper_chars =
array
(
"A"
,
"B"
,
"C"
,
"D"
,
"E"
,
"F"
,
"G"
,
"H"
,
"I"
,
"J"
,
"K"
,
"L"
,
"M"
,
"N"
,
"O"
,
"P"
,
"Q"
,
"R"
,
"S"
,
"T"
,
"U"
,
"V"
,
"W"
,
"X"
,
"Y"
,
"Z"
);
$this
->lower_chars =
array
(
"a"
,
"b"
,
"c"
,
"d"
,
"e"
,
"f"
,
"g"
,
"h"
,
"i"
,
"j"
,
"k"
,
"l"
,
"m"
,
"n"
,
"o"
,
"p"
,
"q"
,
"r"
,
"s"
,
"t"
,
"u"
,
"v"
,
"w"
,
"x"
,
"y"
,
"z"
);
$this
->number_chars =
array
(
"1"
,
"2"
,
"3"
,
"4"
,
"5"
,
"6"
,
"7"
,
"8"
,
"9"
,
"0"
);
$this
->special_chars =
array
(
"!"
,
"@"
,
"#"
,
"$"
,
"%"
,
"^"
,
"&"
,
"*"
,
"("
,
")"
);
$this
->extra_chars =
array
(
"["
,
"]"
,
"{"
,
"}"
,
"-"
,
"_"
,
"+"
,
"="
,
"<"
,
">"
,
"?"
,
"/"
,
"`"
,
"~"
,
"|"
,
","
,
"."
,
";"
,
":"
);
if
((
$this
->uppercase =
$uppercase
) === true) {
$this
->chars =
array_merge
(
$this
->chars,
$this
->upper_chars);
}
if
((
$this
->lowercase =
$lowercase
) === true) {
$this
->chars =
array_merge
(
$this
->chars,
$this
->lower_chars);
}
if
((
$this
->number =
$number
) === true) {
$this
->chars =
array_merge
(
$this
->chars,
$this
->number_chars);
}
if
((
$this
->special =
$special
) === true) {
$this
->chars =
array_merge
(
$this
->chars,
$this
->special_chars);
}
if
((
$this
->extra =
$extra
) === true) {
$this
->chars =
array_merge
(
$this
->chars,
$this
->extra_chars);
}
$this
->chars =
array_unique
(
$this
->chars);
}
function
generate()
{
if
(
empty
(
$this
->chars)) {
return
false;
}
$hash
=
''
;
$totalChars
=
count
(
$this
->chars) - 1;
for
(
$i
= 0;
$i
<
$this
->length;
$i
++) {
$hash
.=
$this
->chars[
$this
->random(0,
$totalChars
)];
}
return
$hash
;
}
function
random(
$min
= 0,
$max
= 0)
{
$max_random
= 4294967295;
$random
= uniqid(microtime() . mt_rand(), true);
$random
= sha1(md5(
$random
));
$value
=
substr
(
$random
, 0, 8);
$value
=
abs
(hexdec(
$value
));
if
(
$max
!= 0) {
$value
=
$min
+ (
$max
-
$min
+ 1) *
$value
/ (
$max_random
+ 1);
}
return
abs
(
intval
(
$value
));
}
}