note 87487 modified in function.rand by danbrown
| From: | danbrown@php.net | Date: | Mon, 23 Mar 2009 23:18:00 +0000 |
| Subject: | note 87487 modified in function.rand by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-152359@lists.php.net to get a copy of this message | ||
I also enjoy making one-liners.
Here's a non-regular expression approach. It generates a random 32 character string consisting
of, by default, only A-Z, a-z, and 0-9, but you can change the value of $a for other characters. The
random string will be in variable $s after this line.
<?php
for ($s = '', $i = 0, $z = strlen($a =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')-1; $i != 32; $x =
rand(0,$z), $s .= $a{$x}, $i++);
?>
If you don't want the same character to appear beside itself, use this:
<?php
for ($i = 0, $z = strlen($a =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')-1, $s = $a{rand(0,$z)},
$i = 1; $i != 32; $x = rand(0,$z), $s .= $a{$x}, $s = ($s{$i} == $s{$i-1} ? substr($s,0,-1) : $s),
$i=strlen($s));
?>
For those of you who want both as a function, use this:
<?php
function rand_chars($c, $l, $u = FALSE) {
if (!$u) for ($s = '', $i = 0, $z = strlen($c)-1; $i < $l; $x = rand(0,$z), $s .=
$c{$x}, $i++);
else for ($i = 0, $z = strlen($c)-1, $s = $c{rand(0,$z)}, $i = 1; $i != $l; $x = rand(0,$z), $s .=
$c{$x}, $s = ($s{$i} == $s{$i-1} ? substr($s,0,-1) : $s), $i=strlen($s));
return $s;
}
?>
string $c is the string of characters to use.
integer $l is how long you want the string to be.
boolean $u is whether or not a character can appear beside itself.
Examples:
rand_chars("ABCEDFG", 10) == GABGFFGCDA
rand_chars("ABCEDFG", 10, TRUE) == CBGFAEDFEC
--was--
I also enjoy making one-liners.
Here's a non-regular expression approach. It generates a random 32 character string consisting
of, by default, only A-Z, a-z, and 0-9, but you can change the value of $a for other characters. The
random string will be in variable $s after this line.
for ($s = '', $i = 0, $z = strlen($a =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')-1; $i != 32; $x =
rand(0,$z), $s .= $a{$x}, $i++);
If you don't want the same character to appear beside itself, use this:
for ($i = 0, $z = strlen($a =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890')-1, $s = $a{rand(0,$z)},
$i = 1; $i != 32; $x = rand(0,$z), $s .= $a{$x}, $s = ($s{$i} == $s{$i-1} ? substr($s,0,-1) : $s),
$i=strlen($s));
For those of you who want both as a function, use this:
function rand_chars($c, $l, $u = FALSE) {
if (!$u) for ($s = '', $i = 0, $z = strlen($c)-1; $i < $l; $x = rand(0,$z), $s .=
$c{$x}, $i++);
else for ($i = 0, $z = strlen($c)-1, $s = $c{rand(0,$z)}, $i = 1; $i != $l; $x = rand(0,$z), $s .=
$c{$x}, $s = ($s{$i} == $s{$i-1} ? substr($s,0,-1) : $s), $i=strlen($s));
return $s;
}
string $c is the string of characters to use.
integer $l is how long you want the string to be.
boolean $u is whether or not a character can appear beside itself.
Examples:
rand_chars("ABCEDFG", 10) == GABGFFGCDA
rand_chars("ABCEDFG", 10, TRUE) == CBGFAEDFEC
http://php.net/manual/en/function.rand.php