Si me lo permites rodrypaladin, teniendo en cuenta que lexus hizo hincapié en que no se repitan los códigos, en tu función aparte de que los caracteres no se pueden repetir, existe un pequeña posibilidad de que los códigos se repitan.
He modificado el tuyo para montarlo en una función.
Se especifica la cantidad (por defecto 1), la longitud (por defecto 10) y si incluye caracteres numéricos (por defecto sí).
Esta función comprueba específicamente que el código que genera no haya salido ya con anterioridad.
Código PHP:
function generarCodigos($cantidad=3, $longitud=10, $incluyeNum=true){
$caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if($incluyeNum)
$caracteres .= "1234567890";
$arrPassResult=array();
$index=0;
while($index<$cantidad){
$tmp="";
for($i=0;$i<$longitud;$i++){
$tmp.=$caracteres[rand(0,strlen($caracteres)-1)];
}
if(!in_array($tmp, $arrPassResult)){
$arrPassResult[]=$tmp;
$index++;
}
}
return $arrPassResult;
}
$codigos=generarCodigos(3,10);
print_r($codigos); // Array ( [0] => XOIU3JIGY5 [1] => 16LJO4S0HO [2] => RU7HY16MI6 )
Espero que te sirva.
Saludos, Alex.