entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Necesito ayuda con un ejercicio en PHP

estoy con un código para generar folios sólo numéricos, y ya funciona mi generador pero solo me genera números de 1 al 9 y yo necesito folios de 4 digitos como por ejemplo 5031 ¿como podría hacer para que me genere numeros de 4 digitos ? aqui mi código php

 <?php

        generador(5,true,true);

        function generador ($longitud,$numeros)
        {
            $variacteres = $numeros?'0123456789':'';

            $i = 0;
            $clv ='';

            while ($i<$longitud)
                {
                    $numrad = rand (0, strlen($variacteres)-1); 
                    $clv = substr ($variacteres, $numrad,1);
                $i++;
                }

        echo "$clv";

        }

        ?>

1voto

carlossevi comentado

La función generador() está definida con 2 parámetros pero la invocas con 3, ¿cuál de los dos puntos está equivocado?

0voto

johana comentado

Ya vi el error en la función de generador(), son solo dos, un true para longitud y el otro para números y el 5 debería ser dos que según yo son el numero de parámetros que estoy invocando.

0voto

Leonardo-Tadei comentado

No entiendo... lo que querés es generar números al azar de una longitud de dígitos dada? También vale el :?

PD: la línea $variacteres = $numeros?'0123456789':''; siempre usará la variable $numeros porque ese parámetro es obligatorio.

0voto

johana comentado

Si, quiero que me de números de 4 dígitos, ya sea al azar o si es posible en orden, como por ejemplo 5010, etc. y el signo ? según yo es para que me indica si el valor es verdadero o falso.

Encontré esta linea "V".str_pad(clave, 4,'0',STR_PAD_LEFT); que me agrega más caracteres, como números, letras y me indica la posición del numero que se va a generar, pero no he podido aplicarla. AMABLEMENTE PIDO DE SU GRAN AYUDA.

1 Respuesta

2votos

Leonardo-Tadei Puntos227320

Hola @johana,

esta podría ser una solución:

<?php

function generador ($longitud)
{
    // Genera un número de 9s de la $longitud recibida.
    // Ej. 3 = 999, 5 = 99999, etc.
    $max = str_pad('', $longitud,'9');
    // Genera un número aleatorio entre 0 y el máximo.
    $res = rand(0, $max);
    // completa con 0 adelante por si el número es de
    // menos de $longitud de largo.
    return str_pad($res, $longitud,'0',STR_PAD_LEFT);
}

print("Generado longitud 6: ".generador(6));
?>

Se puede escribir todo en una sola línea con las 3 funciones anidadas, pero es mucho menos claro para leer.

Saludos cordiales!

PD: Si no es esto lo que te hace falta, por favor poné ejemplos de qué valores recibiría la función y qué resultados se deben generar.

1voto

johana comentado

Muchísimas gracias Leonardo! está perfecto. :)

0voto

johana comentado

Hola @Leonardo-Tadei
En el generador que tu me has proporcionado , ¿Como podría ser que se generen consecutivamente y NO aleatoria?
Por ejemplo
0001 el siguiente
0002 el siguiente
0003 el siguiente
0004 Así sucesivamente ?

De la misma forma en que me genera los números pero en vez de aleatoria que sea consecutivamente ?

1voto

Leonardo-Tadei comentado

Hola @johana,

sería más fácil, porque solo hace falta un bucle con el valor inicial y final:

<?php
function generador ($desde, $hasta, $cifras)
{
  for($i==$desde; $i<=$hasta; $i++)
  {
     print (str_pad($i, $cifras,'0',STR_PAD_LEFT));
  }
  return true;
}

print("Generar 10:<br>")
generador(1,10,4);
?>

Esta función es bastante inútil, porque el resultado no puede ser tomado por otra como la anterior. Al devolver varios valores en vez de uno solo, tendría que devolver un vector con todos los resultados, pero eso es casi tan complicado de usar como llamar directamente a str_pad() con el valor que te haga falta...

Saludos cordiales!

PD: enunciá bien tu problema y tu pregunta, porque cada algoritmos tiene decenas de variantes. No pueden ser números al azar y números consecutivos al mismo tiempo ;-)

0voto

johana comentado

Mil Gracias :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta