Programadores a mi

feanor

Miembro habitual
Mensajes
1.754
Reacciones
1.364
Ubicación
L'Hospitalet de Llobregat
Hola, estoy haciendo una aplicación en VB 2008, no es mi especialidad, yo programo PLC's, robots, scada, ect.. y de vez en cuando algo pequeño en VB.

Necesito crear números aleatorios entre el 0-999999, pero necesito que nunca se repitan en el mismo día, esto útimo es vital. Si se apaga la aplicación no ha de empezar con la misma sucesión, en el mismo día. El día que se atrasa la hora, no ha de repetir ninguno. La aplicación deberá crear unos 500000 números distintos durante un día. Al día siguiente ya pueden repetirse aunque sería mejor que la sucesión empezase de otra forma.
No me vale una sucesión "intuitiva" como el reloj con cierta encriptación o desordenado.
No estoy seguro de que rnd() no reptita ninguno inicializandolo con randomize a la fecha del sistema y para asegurarme solo se me ocurre la burrada de probarlo, escribiendolos en una base de datos o archivo de texto y luego buscando. :doh

Se que este no es un foro de programación pero también se que hay unos cuantos programadores en la sala.

Gracias
 
¿Aleatorios correlativos o no correlativos?

Si pueden ser correlativos, simplemente genera un autonumérico. Guárdalo en un txt o xml, junto con la fecha en que ha sido generado. Así podrás elegir entre continuar o no, si es otro día.

Si no son correlativos y no quieres guardar en un bbdd o fichero todos los que generas... tendrás que acudir a factores como el reloj.
Yo generaría un autonumerico y multiplicaría por el numero generado con la hora & minuto & segundo. Ese numero generado con el reloj, sería único mientras dure el día. Guarda el ultimo autonumérico en un xml, para continuar siempre desde el ultimo. La multiplicación con el autonumérico con la hora hace que el patrón sea difícil de identificar.

Otra cosa sin guardar la lista de números generados... se me antoja difícil.
 
feanor dijo:
Hola, estoy haciendo una aplicación en VB 2008, no es mi especialidad, yo programo PLC's, robots, scada, ect.. y de vez en cuando algo pequeño en VB.

Necesito crear números aleatorios entre el 0-999999, pero necesito que nunca se repitan en el mismo día, esto útimo es vital. Si se apaga la aplicación no ha de empezar con la misma sucesión, en el mismo día. El día que se atrasa la hora, no ha de repetir ninguno. La aplicación deberá crear unos 500000 números distintos durante un día. Al día siguiente ya pueden repetirse aunque sería mejor que la sucesión empezase de otra forma.
No me vale una sucesión "intuitiva" como el reloj con cierta encriptación o desordenado.
No estoy seguro de que rnd() no reptita ninguno inicializandolo con randomize a la fecha del sistema y para asegurarme solo se me ocurre la burrada de probarlo, escribiendolos en una base de datos o archivo de texto y luego buscando. :doh

Se que este no es un foro de programación pero también se que hay unos cuantos programadores en la sala.

Gracias

Bueno aquí un matemático, que hizo sus pinitos como programador hace tiempo y que actualmente trabaja con bases de datos, a ver si te puedo ayudar.

Si quieres que sean aleatorios tendrás que utilizar algún tipo de función randomize.
Si no quieres verificar su unicidad tendrás que perder parte de la aleatoriedad haciendo que la secuencia siempre sea incremental. Con el método que te pongo sólo necesitas guardar el último.

Nº inicial: rand (0-99) (o el número de dígitos que necesites)
Resto de números: Último número calculado + rand(0-99) (Te pongo suma porque multiplicando te puedes salir de rango)

Al ser una sucesión creciente cada nuevo número es mayor que todos los anteriores y por tanto distinto y no necesitas comprobar nada. Pierdes algo de aleatoriedad porque sólo calculas aleatoriamente lo que sumas al anterior.

Es un poco 'chapu' pero te puede servir.

Saludos,

kalkon
 
Arriba Pie