Foros del Web » Programando para Internet » PHP »

SCRIP para generar Pines aleatorios

Estas en el tema de SCRIP para generar Pines aleatorios en el foro de PHP en Foros del Web. Hola de nuevo.... No se que tan complicado sea hacer esto pero lo he buscado en muchos foros y no lo encuentro.... tengo un formulario ...
  #1 (permalink)  
Antiguo 30/03/2008, 21:53
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
SCRIP para generar Pines aleatorios

Hola de nuevo....

No se que tan complicado sea hacer esto pero lo he buscado en muchos foros y no lo encuentro....

tengo un formulario donde ingreso estos datos:

1-NUMRO DE PINES (valor numerico-entero, correspondiente al numero de pines que se vana generar)

2-VENCIMIENTO (Lista desplegable "30,60,90", correspondiente al numero de dias que se puede usar el PIN)

lo que necesito es que de acuerdo a los valores ingresados en el formulario, un script de PHP me cree un grupo de registros aleatorios no repetidos y los incluya en una tabla de MySQL, cabe aclarar que los pines no se pueden repetir incluso con los que ya estan en la tabla anteriormente.

ejemplo:
"en el formulario ingreso NUMERO DE PINES=7, VENCIMIENTO=30"
"y el script me crea estos datos que sube en la TABLA: PINES"


PIN | VENCE
sd5465sad | 30
4d5d65sad | 30
minuh5sad | 30
psmnfu579 | 30
7815qwdai | 30
wiwhshanse | 30
gstafql74s5 | 30



La cantidad de digitos de cada PIN es indiferente.

Si alguien sabe como hacerlo y me ppuede dar una mano con este script se lo agradeceré...

Leonardo R
  #2 (permalink)  
Antiguo 31/03/2008, 01:50
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
Re: SCRIP para generar Pines aleatorios

Bueno he encontrado una solucion parcial para mi problema,...

con este codigo genero los pines ...

<?php
function genpin()
{
echo rand(1000, 9999) . "\n";
echo rand(1000, 9999) . "\n";
echo rand(10, 99);
echo "<br>";
}


$i=1;
while($i<=10){
$matriz[$i]=genpin();
$i++;
}
$sql = "INSERT INTO pines VALUES ('$matriz[$i]', '30')";
$res = mysql_query($sql, $dbd);
if($res){
echo "los pines subieron<br>";
}else{
echo "error al subir los pines".mysql_error();
}

?>

pero no logro hacer que me suba los pines a la tabla,
solo me sube un campo en blanco y el valo 30,

Como pueod subir cada valor generado por el script???

Gracias:

leonardo R
  #3 (permalink)  
Antiguo 31/03/2008, 01:57
jpeeri
Invitado
 
Mensajes: n/a
Puntos:
Re: SCRIP para generar Pines aleatorios

¿El pin tiene alguna lógica? Si no la tiene te recomiendo que hagas un array con todos los valores posibles.

Código PHP:
$valores = array(0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","y","z");
$valoresNum count($valores) - 1// -1 porque se empieza a contar por el 0.
$numCaracteres 10;

for (
$i=0;$i<=$numCaracteres;$i++){
    
$aleatorio rand(0,$valoresNum);
    
$resultado .= $valores[$aleatorio];
}

echo 
$resultado
  #4 (permalink)  
Antiguo 31/03/2008, 02:16
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
Re: SCRIP para generar Pines aleatorios

He probado tu codigo y no me da el mismo restlado, la verdad me parece mejor el que ya tengo, de todas formas muchas gracias, por el aporte....

Sin embargo aun necesito subir cada pin generado como un registro a la tabla en MySQL,

Leonaerdo R.
  #5 (permalink)  
Antiguo 31/03/2008, 13:13
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
Re: SCRIP para generar Pines aleatorios

Solucionado....

Código PHP:
<?php
$i
=1;
while(
$i<=100){
$var1=rand(10009999) ;
$var2=rand(10009999) ;
$var3=rand(1099);
$var =$var1.$var2.$var3;
echo 
"<br>$var";
$sql "INSERT INTO pines VALUES ('$var', '30')";
$res mysql_query($sql$dbd);
$i++;
}
if(
$res){
echo 
"<p>los pines subieron<br></p>";
}else{
echo 
"<p>error al subir los pines</p>".mysql_error(); 
}

?>
Leonardo R.
  #6 (permalink)  
Antiguo 31/03/2008, 14:47
 
Fecha de Ingreso: enero-2008
Mensajes: 381
Antigüedad: 16 años, 3 meses
Puntos: 19
Re: SCRIP para generar Pines aleatorios

Ya lo has solucionado todo?
  #7 (permalink)  
Antiguo 31/03/2008, 20:24
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
Re: SCRIP para generar Pines aleatorios

SI lo hice así:

Desde un formulario envio los dos datos Cantidad de pines y días vencimiento, y el script final es:


Código PHP:
<?php
if($button){

if(!
$button){
echo 
"NO HA INGRESADO NINGUNA CANTIDAD DE PINES TRATE DE VEUEVO";
die;
}else{
$i=1;
while(
$i<=$cant_pines){
$var1=rand(10009999) ;
$var2=rand(10009999) ;
$var3=rand(1099);
$var =$var1.$var2.$var3;
echo 
"<br>$var";
$sql "INSERT INTO pines VALUES ('$var', '$dias')";
$res mysql_query($sql$dbd);
$i++;
}
if(
$res){
echo 
"<p>LOS PINES FUERON CREADOS CON EXITO<br></p>";
}else{
echo 
"<p>ERROR AL GENERAR LOS PINES</p>".mysql_error(); 
}}}

?>
De esta forma me sube los pines con sus dias de vencimiento correspondientes.
  #8 (permalink)  
Antiguo 31/03/2008, 22:40
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: SCRIP para generar Pines aleatorios

Sólo quería comentarte que con ése código no evitas que los pines no se repitan.

Dependiendo de los pines que vayas a crear puede darse el caso de que se repita alguno.

La función microtime por ejemplo devuelve el tiempo en microsegundos y metida dentro de un bucle devuelve números únicos a cada iteración.

Y luego ya para dar a la clave algo de arbitrariedad puedes pasarla a md5.

Y tambíen puedes sumar un número aleatorio antes de pasarlo a md5 a todos los microtime, puesto que sabes que la parte digamos única la tienes asegurada por el microtime.

Es que hace poco a mi me pidieron una cosa similar, aunque era para generar números de licencia de un producto y estuve a punto de meter la pata por no pararme a pensar en estas cosas.

De esta forma sabes que si las claves se generan sólo en un servidor serán siempre únicas.

Si se generan en varios servidores que conectan a base de datos ya habría que hacer algo más, porque los tiempos de ejecución del php podrian alguna vez ser los mismos(el mismo microsegundo), aunque tb habrían de concincidir los números aleatorios lo cual sería ya mucha casualidad, pero bueno se solucionaría anteponiendo un caracter más a la cadena de la que se saca el md5 y ya está(para que cada servidor y en el peor de los casos añada una letra distintiva digamos suya propia antes de pasar a md5)

Pero bueno que tb depende de lo que estes haciendo.

Te dejo un pequeño código para que veas en una tablita como se generan los pines:
Código PHP:
<style>
/* This is the outline round the main forum tables */
.forumline    { background-color: #FFFFFF; border: 2px #006699 solid; }
th    {
    color: #FFA34F; font-size: 13px; font-weight : bold;
    background-color: #336699; height: 25px;
}
/* Main table cell colours and backgrounds */
td.row1    { background-color: #EFEFEF; }
td.row2    { background-color: #DEE3E7; }
td.row3    { background-color: #D1D7DC; }
</style>
<body bgcolor="#f9f9f9">
<table  class="forumline" align="center">
<tr><th><tt>Aleatorio</tt></th><th><tt>Microtime</tt></th><th><tt>Número generado</tt></th><th><tt>Pin</tt></th></tr><?
$i
=1
$cant_pines=30;
while(
$i<=$cant_pines){
$aleatorio=rand(1,1000000000);
$var=microtime();
$var1=str_replace("0.",$aleatorio.".",$var);
$var2=(md5($var1));
echo 
"
    <tr style='font-size:11px;border:2px groove black'>
        <td class='row3' align='right'>
            <tt style='color:#336699'>&nbsp;&nbsp;&nbsp;$aleatorio&nbsp;&nbsp;&nbsp;&nbsp;</tt>
        </td>
        <td class='row2' align='right'>
            <tt style='color:#336699'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$var&nbsp;&nbsp;&nbsp;&nbsp;</tt>
        </td>
        <td class='row3' align='right'>
            <tt style='color:#336699'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$var1&nbsp;&nbsp;&nbsp;&nbsp;</tt>
        </td>
        <td class='row1' align='right'>
            <tt style='color:#336699'><b>&nbsp;&nbsp;&nbsp;$var2&nbsp;&nbsp;&nbsp;&nbsp;</b></tt>
        </td>
    </tr>"
;
$i++;
?></tt>
Esta aqui colgado tb
http://3wservicios.com/foro/time.php

Un saludo...(lo mismo esto tampoco es perfecto quién sabe :S)
__________________
[+]
[+]
  #9 (permalink)  
Antiguo 01/04/2008, 00:06
Avatar de Infernal  
Fecha de Ingreso: septiembre-2004
Ubicación: Tamaulipas, Mexico
Mensajes: 124
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: SCRIP para generar Pines aleatorios

Una ayudita, si quieres que sea unico y sin batallar usa la funcion uniqid de php http://www.php.net/uniqid
  #10 (permalink)  
Antiguo 01/04/2008, 12:42
Avatar de insyse  
Fecha de Ingreso: abril-2005
Ubicación: Colombia
Mensajes: 206
Antigüedad: 19 años
Puntos: 5
Re: SCRIP para generar Pines aleatorios

Estan muy buenas sus propuestas, en cuanto a la de Yoseman, la cadena es demasiado larga y la idea es que un visitante de la pagina pueda descargar el pin o token, para hacer compras con descuentos usando este pin o token. así que el visitante se sacaría los ojos tratando de transcribir el codigo generado...

En la segunda opcion, es mas sencilla pero igual es muy extensa, trate de hacerlo sin usar un prefijo, es decire sin colocar la cadena rand(), pero no me da 13 caracteres como dice el ejemplo, en los dos casos me da 32 caracteres... Sin embargo encontré este otro codigo que me parece mejor y tambien es irrepetible...

Código PHP:
<?php 

// Uso/sintax: 
// genera_password (longitud password en caracteres o digitos, [tipo=alfanumerico|numerico]) 
// Si no indicas $tipo se asume como por defecto alfanumerico. 

function genera_password($longitud,$tipo="alfanumerico"){ 

    if (
$tipo=="alfanumerico"){ 
        
$exp_reg="[^A-Z0-9]"
    } elseif (
$tipo=="numerico"){ 
        
$exp_reg="[^0-9]"
    } 
     
    return 
substr(eregi_replace($exp_reg""md5(rand())) . 
       
eregi_replace($exp_reg""md5(rand())) . 
       
eregi_replace($exp_reg""md5(rand())), 
       
0$longitud); 


//Ejemplo: 
echo "Password: (alfanumérico) ".genera_password(12)."<br>"
echo 
"Password: (numérico) ".genera_password(15,"numerico")."<br>"
echo 
"(recarga la página para ver otros passwords aleatorios)"

?>
  #11 (permalink)  
Antiguo 01/04/2008, 19:44
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: SCRIP para generar Pines aleatorios

Si vas a usar ese código te aconsejo que no uses la opción de númerico porque las posibilidades de repetición para cadenas de longitud cortas es alto(siempre y cuando hablemos de generar muchos pines.

Es que lo único que hace es borrar los caracteres a,b,c,d,e o f de la clave que utiliza como base.

Un ejemplo:

Estos dos md5

46aab0a5b7bbbb9e499790e9ab6d78b0
46cdf0d5f7abcf9f499790f9ca6a78a0


Daría un pin numérico igual.

Lo que se pretende metiendo el factor tiempo en microsegundos es generar una cadena que nunca se pueda repetir, y esa cadena es la que se usa para pasar a md5.

Pero partir como en ese ejemplo de tres md5 concatenados procedentes de un número aleatorio no garantiza que en otra ejecución no te salga el mismo pin, y se aumenta la probabilidad en pines cortos.

Otra cosa es que no vayas a hacer muchos pines, pero con uniqid o con mi código se garantiza que no se saca nunca un numero igual, porque si la parte aleatoria se repitiese con microtime se soluciona.

Si no tienes previsto que vaya a haber mucha tirada de pines no hay problema creo yo, aparte de lo que te he comentado(mejor no usar la opción de numérico y poner una longitud aceptable)

Pero si crees que en un futuro la cosa se puede desmadrar en serio utiliza alguna opción que te garantice que nunca en el ordenador que genera los pines se pueda dar la posibilidad de que se repita alguno.

Porque si no, puede plantearte un problema gordo en un futuro.

Pero bueno yo tampoco soy experto en creacion de claves.

Un saludo.
__________________
[+]
[+]

Última edición por yoseman; 01/04/2008 a las 19:53
  #12 (permalink)  
Antiguo 01/04/2008, 22:38
 
Fecha de Ingreso: abril-2008
Mensajes: 10
Antigüedad: 16 años
Puntos: 0
Re: SCRIP para generar Pines aleatorios

no olvides usar srand() al comienzo, si no, no obtendras numeros demasiado aleatorios.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:16.