Any reason why this code sometimes only generates 4 character strings?
function genID()
{
$id = '';
$values = '0123456789abcdefghijklmnopqrstuvwxyz';
for($i=0; $i < 5; $i++) :
$str = substr($values, rand(0, strlen($values)), 1);
if(!is_nan(acos($str)))
(mt_rand(0, 1)) ? $str = strtoupper($str) : '';
$id .= $str;
endfor;
return $id; // e.g: ifR8j
}
Try, something simple:
function genID() {
$id = '';
$i = $length = 4;
$possible = "0123456789bcdfghjkmnpqrstvwxyz";
$possibleChar = strlen($possible) - 1;
while ($i) {
$char = $possible[mt_rand(0, $possibleChar)];
while (!strstr($id, $char)) {
$id .= $char;
$i--;
}
}
return $id;
}
(mt_rand(0, 1)) ? $str = strtoupper($str) : '';
This condition is met so sometimes you get an empty char.
Fix the condition or do the loop in some other manner. For example
while(strlen($id)<5) {
//do the loop
}
The loop iterates 5 times.
rand
will also return strlen
, so $str
will sometimes be ""
acos($str) accepts numbers not string.... if u remove the aphabets from the string
ie.
$values = '0123456789abcdefghijklmnopqrstuvwxyz';
to
$values = '0123456789';
you will get the length as 5... Hope this helps..
$str = substr($values, rand(0, strlen($values))-1, 1);
This will generate 5 characters always.