2011-05-18 30 views
7

Si genero al azar una cadena de 32 caracteres, ¿puedo usar esta cadena como GUID para todos los efectos?Guid vs cadena aleatoria

¿El "GUID" que genero tendrá más o menos probabilidad de colisión que un GUID "real"?

Se aprecia cualquier información más específica sobre los GUID y cómo se comparan con las cadenas aleatorias.

Respuesta

1

Depende del algoritmo que utilizará. Si tienes un buen generador, el resultado sería el mismo.

La probabilidad depende de qué tan buenos sean los generadores (el suyo frente al GUID uno).

4

GUID-generation algorithms tienen en cuenta la fecha y la hora, así como la generación de números aleatorios para crear el valor final de 128 bits.

Si simplemente genera cadenas aleatorias sin ninguna otra algorítmica arrojada, entonces sí, correrá un riesgo mucho mayor de colisión. (Las computadoras no pueden crear números verdaderamente aleatorios para que otros datos se plieguen en los algoritmos de gen GUID para reducir el riesgo de colisión. GUID v1 por ejemplo usó la dirección MAC de una computadora aunque ese enfoque ha quedado obsoleto porque identifica la computadora generadora)

Puede crear su propio valor GUID pero, ¿por qué reinventar algo que ya funciona bien?

También, vea Eric Lippert's answer por qué el uso de un GUID es superior al uso de su propio generador de ID aleatorio hecho en casa.

1

Yo sugeriría utilizar guid real. Las posibilidades de que su generador de cuerdas al azar sea único son mucho menores que las de un guid.

3

Un GUID no es una cadena de 32 caracteres de longitud. Entonces, no, no puedes usarlo en lugar de un GUID.

Dependiendo de la codificación, un char puede ser de uno o dos bytes, por lo que 32 caracteres pueden ser de 32 bytes o 64 bytes. Un GUID es de 16 bytes. Si tiene una cantidad equivalente de aleatoriedad en su generador, su cuerda producirá menos posibilidades de colisión. Diciendo eso, la probabilidad de colisión en 16 bytes es bastante improbable.

La ventaja es que debe tener al menos un generador tan bueno como el generador Guid para que valga la pena. Cuando hagas eso, patentarlo.

+2

+1 por solo el comentario de la patente. ;-) –

0

Social MSDN da poca información, pero no responde a su pregunta si es más probable o no que haya una colisión. Guid Structure indica que un GUID no es una cadena, sino "Un GUID es un entero de 128 bits (16 bytes) que se puede usar en todas las computadoras y redes donde se requiere un identificador único. Tal identificador tiene una probabilidad muy baja de ser duplicado. "

2

Depende del GUID con el que lo compare: actualmente la mayoría de los GUID son" Versión 4 ", que en realidad es solo un gran número aleatorio con algunos bits desperdiciados. Siempre que su generador de números aleatorios sea tan bueno como el que se utilizó para generar el GUID, su solución es más única.

Si es un GUID de la Versión 1, probablemente sea más exclusivo que un número aleatorio (suponiendo que se usa como se esperaba: el reloj del sistema no se restablece con frecuencia, el sistema tiene una tarjeta de red y la dirección MAC no ha sido manipulado) pero la mayoría de la gente ya no usa la versión 1 porque filtra su dirección MAC.