Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/07/2009, 02:30
El-FeNiX
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 18 años, 8 meses
Puntos: 19
Respuesta: error en bucle!!

Has puesto $NroTarjeta = rand(100,999); fuera del bucle por lo que siempre sera el mismo numero. Simplemente ponlo dentro para que cada vez que se recorra el bucle asigne otro valor a $NroTarjeta

Si tiene que ser obligatoriamente no repetido, ve añadiendo todos los numeros generados a un array y despues haces un blucle para comprobar si no esta en el array.

Código PHP:

$NrosGen 
= new Array();

// matriz

   
for ($contador = 1; $contador <= 20; $contador++) 
   { 
        do 
$NroTarjeta = rand(100,999);  // obtengo un numero aleatorio    
        
while (!in_array($NrosGen)); // comprueba si ya ha sido usado 
        
$NrosGen[] = $NroTarjeta; // Añade al siguiente valor disponible del array el numero generado.
        
$Z = ($NroTarjeta + 1); 
        
$n =  pow($NroTarjeta,(1/3));
        
$nRnd = ceil($n); // redondeo el valor de n
        
$ValorLetra = ($nRnd * $Z); // cada letra vale n redondeado por z
        
$ValorLetraRed = substr($ValorLetra,2); // reduzco la cantidad de caracteres a 2
        
$NroChar = strlen($ValorLetraRed); // obtengo el numero de caracteres de la cadena
                
        
if ($NroChar == "1") // si es igual a 1 osea 1 digito
            
{ 
                echo 
"arreglado <br>";
                   
$NroCharFix = ($ValorLetraRed + 10); // sumo 10 para subirlo a 2 digitos
                
echo "valor final = " .$NroCharFix. "<br>";
            } else {
            
                echo 
"valor final = " .$ValorLetraRed. "<br>";

            }
        
   } 
Tampoco entiendo porque haces tantas operaciones, pero será para algo que necesites.