Numero Aleatorio e Irrepetible

09/09/2008 - 17:44 por Lazarte Federico | Informe spam
Estimados.
Necesito crear un numero aleatorio de 7 digitos y que este sea
irrepetible.
Este numero va a ser generado por unos 20 puestos de toma de datos,
cada uno generara su numero y tengo que tratar que no se repitan.
Alguien tiene algun ejemplo?.
Gracias,.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
09/09/2008 - 18:17 | Informe spam
"Lazarte Federico" wrote in message
news:
Mostrar la cita
Si te valiera un número más grande, podrías usar la clase Guid para
generarlos. Pero con solo 7 dígitos, no tendrás más remedio que asignar a
cada uno de los puestos un rango de números a su disposición, y que genere
números dentro de dicho rango. Es la única forma de que no repita los
números de otros puestos, a no ser que los puestos están interconectados y
puedas ir almacenando los números ya generados en un repositorio central. En
ese caso no tienes más que generar números al azar, comprobar que no han
sido ya utilizados (y repetir en caso afirmativo).
#2 Alfredo Novoa
10/09/2008 - 11:47 | Informe spam
Hola Alberto,

El Tue, 9 Sep 2008 18:17:34 +0200, Alberto Poblacion escribió:

Mostrar la cita
También se pueden almacenar los números no generados y así nunca habrá que
repetir la generación de números. Los números no generados (o los
generados) también se podrían almacenar en un repositorio distribuido.

Si los puestos no están conectados se pueden generar todos los números de 7
dígitos y repartirlos (aleatoriamente por ejemplo) entre tantos grupos como
puestos y almacenar un grupo en cada puesto. Así podríamos evitar usar
rangos.


Saludos
Alfredo
#3 RFOG
10/09/2008 - 12:10 | Informe spam
Alfredo, la idea no es mala... pero almacenar diez millones de números...
Aparte de que yo al menos veo un potencial problema de seguridad: ya sabes
qué números van a salir.

La forma más "formal" desde mi punto de vista sería la siguiente: Obtener
una clave SHA de un GUID generado aleatoriamente en cada equipo y
potencialmente comparar dicha clave SHA entre los equipos para evitar una
improbable duplicidad. O mejor todavía: generar dicha clave SHA a partir
del número de serie físico del disco duro más la clave de activación del
windows o la MAC de la tarjeta de red. Luego, cada equipo generaría un
número aleatorio sin más que iría concatenado al código SHA.

De este modo, aunque dos terminales generaran el mismo número aleatorio
(cosa que no es nada difícil), al ir concatenado a la clave SHA (que si se
toma como he dicho debería ser completamente única), dicho número sería
completamente único aunque algunas cifras serían iguales.

La ventaja de esto es que incluso no es necesario ni almacenar dicha clave
SHA, ya que se podría generar automáticamente cada vez que fuera
necesaria... Otra cosa es lo fácil que es desensamblar un ejecutable .NET
para encontrar el código generatriz, lo que se podría medio resolver con
un ensamblado mixto en C++/CLI y código nativo que tuviera la parte
generatriz en C++ clásico. Así subimos las apuestas contra la
decodificación, y al ni siquiera almacenar la clave SHA tendríamos un
sistema casi todo lo seguro que fuera necesario...

On Wed, 10 Sep 2008 11:47:06 +0200, Alfredo Novoa
wrote:

Mostrar la cita
Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Hay una circulación comun, una respiración comun. Todas las cosas están
relacionadas.
#4 Alfredo Novoa
10/09/2008 - 12:58 | Informe spam
Hola RFOG,

El Wed, 10 Sep 2008 12:10:46 +0200, RFOG escribió:

Mostrar la cita
Sale a 1,43 megas por puesto. Cabría en un viejo disquete. A mi no me
parece tanto :-?

Mostrar la cita
No, no lo sabes. El método que se usa en estos casos es elegir
aleatoriamente una posición de la lista y el número que está en esa
posición es el que sale. A continuación se coge el último número de la
lista y se mete en esa posición y se borra el último elemento de la lista.
Esto me lo enseñó mi padre cuando tenía 12 años :-)

Mostrar la cita
Pero entonces ya no tienes un identificador de 7 dígitos.



Saludos
Alfredo
#5 Alfredo Novoa
10/09/2008 - 14:03 | Informe spam
Hola RFOG

El Wed, 10 Sep 2008 12:58:19 +0200, Alfredo Novoa escribió:

Mostrar la cita
Por si alguien no lo ve claro, las claves SHA-0 y SHA-1 tienen 49 dígitos
decimales, y si aun encima les concatenamos cosas, pues nos pasamos
bastante de los 7 :-)

Saludos
Alfredo
Ads by Google
Search Busqueda sugerida