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

#6 RFOG
10/09/2008 - 15:42 | Informe spam
"Alfredo Novoa" wrote in message
news:mjrjm2z9514c.18lt2uu5ccd1g$
Hola RFOG

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

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.



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



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 :-)




Lo de los 7 dígitos no lo había leído. Entonces IMHO hay un problema en el
diseño de origen. 10 millones de número divididos entre X equipos, y encima
estando esos mismo números guardados en disco resulta, junto al posible
desensamblado, un agujero de seguridad bastante serio.

Además, cambia el SHA por un HASH de 64 bits que son 8 dígitos, añadele los
7 originales y enviar por red una cadena de 15 caracteres no es ningún
crimen y el sistema es bastante más seguro.



Saludos
Alfredo



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
El escritor solo puede interesar a la humanidad cuando en sus obras se
interesa por la humanidad.
Respuesta Responder a este mensaje
#7 RFOG
10/09/2008 - 15:47 | Informe spam
"Alfredo Novoa" wrote in message
news:1x38n2lyjercn$
Hola RFOG,

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

Alfredo, la idea no es mala... pero almacenar diez millones de números...



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



Sigo pensando que es una mala idea: ¿Y si se borra? ¿Y si se corrompe?

Aparte de que yo al menos veo un potencial problema de seguridad: ya
sabes
qué números van a salir.



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 :-)



Mejor me lo pones. Cada vez menos números disponibles. Instala un troyano en
la máquina. Haz una copia de la tabla. Mira periódicamente y cuando veas que
falte uno, ya sabes cuál se está usando en ese momento. Mata el proceso
original y "voilá", sistema comprometidísimo.

De la forma que yo digo no hay nada almacenado. Está todo en tiempo de
ejecución.


Saludos
Alfredo



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
El escritor solo puede interesar a la humanidad cuando en sus obras se
interesa por la humanidad.
Respuesta Responder a este mensaje
#8 Alfredo Novoa
10/09/2008 - 16:40 | Informe spam
Hola RFOG,

El Wed, 10 Sep 2008 15:47:01 +0200, RFOG escribió:

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



Sigo pensando que es una mala idea: ¿Y si se borra? ¿Y si se corrompe?



Pues la vuelves a crear, pero eso no tiene por que pasar. Es como si me
preguntas que pasa si se borra la base de datos, o se corrompe el disco
duro, o te cae un avión encima.

Mejor me lo pones. Cada vez menos números disponibles.



Hombre, eso siempre :-)

Instala un troyano en
la máquina. Haz una copia de la tabla. Mira periódicamente y cuando veas que
falte uno, ya sabes cuál se está usando en ese momento. Mata el proceso
original y "voilá", sistema comprometidísimo.



Para saber si el sistema está comprometido o no, yo tendría que tener mucha
más información. A lo mejor el saber que número se está usando no sirve
para nada en absoluto. No creo que Federico quiera usar este método para
asignar claves de cajas fuertes :-)

De la forma que yo digo no hay nada almacenado. Está todo en tiempo de
ejecución.



Pues poniendonos quisquillosos, un troyano también te podría fastidiar de
muchas formas haciendolo como tu dices. Por ejemplo podría hacer que las
llamadas al método SHA1Managed.ComputeHash() devolviesen un código
defectuoso.

Pero si puedes usar todos los dígitos que quieras entonces está claro que
hay soluciones mejores. Para eso también está lo que decía Alberto: generas
un GUID y listo.


Saludos
Alfredo
Respuesta Responder a este mensaje
#9 Fernando A. Gómez F.
10/09/2008 - 18:08 | Informe spam
RFOG wrote:
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.



[SNIP]

O que el OP abandone la idea de números de 7 dígitos y cambie a emplear
Guid's, que creo que sería lo mejor para él.

Saludos.
Respuesta Responder a este mensaje
#10 Alfredo Novoa
10/09/2008 - 18:30 | Informe spam
Hola Fernando,

El Wed, 10 Sep 2008 11:08:11 -0500, "Fernando A. Gómez F." escribió:

O que el OP abandone la idea de números de 7 dígitos y cambie a emplear
Guid's, que creo que sería lo mejor para él.



Pues si, se ahorraría un montón de complicaciones.

Por cierto, ¿Que es un OP?


Saludos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida