Hi I have this function and it returning a notice:
Notice: Uninitialized string offset
function generaterandomkey($length) {
$string='';
$characters = "0123456789abcdef";
for ($p = 0; $p < $length ; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
The affected line is this:
$string .= $characters[mt_rand(0, strlen($characters))];
I have tried doing with braces and it does not work. If someone can point out some suggestions, I would highly appreciate it. Thanks.
You are occasionally overrunning
$characters
because ofstrlen($characters)
, which should bestrlen($characters) - 1
. Your random range should begin with zero, and you need to end with the length minus one. If the length of$characters
is 10, then the last zero-based array index is nine, and that becomes your upper bound for random selection.Because you are choosing randomly, you wouldn't always receive the notice -- it would only occur if
mt_rand()
returned its maximum value at some point in your loop.the best way : convert your string expression to array and then convert to string like this:
function
readnumber
know a number with any length:can use it like this: