Ver Mensaje Individual
  #8 (permalink)  
Antiguo 31/03/2008, 22:40
Avatar de yoseman
yoseman
 
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 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)
__________________
[+]
[+]