Hace unos meses me encomendaron la implementación de un código único y aleatorio para nuestra aplicación web. El código debería ser fácil de usar y lo más pequeño posible, pero seguir siendo esencialmente aleatorio (por lo que los usuarios no podrían predecir fácilmente el próximo código de la secuencia).¿Cómo puedo generar una clave única, pequeña, aleatoria y fácil de usar?
Se terminó la generación de valores que parecían algo como esto:
Af3nT5Xf2
Desafortunadamente, nunca fue satisfecho con la aplicación. Los de Guid estaban fuera de discusión, simplemente eran demasiado grandes y difíciles para que los usuarios ingresaran. Esperaba algo más parecido a 4 o 5 caracteres/dígitos, pero nuestra implementación particular generaría secuencias notablemente modeladas si codificáramos para menos de 9 caracteres
Esto es lo que terminamos haciendo:
Sacamos un identificador de 32 bits único secuencial de la base de datos. Luego lo insertamos en los bits centrales de un entero RANDOM de 64 bits. Creamos una tabla de búsqueda de caracteres fácilmente tipados y reconocidos (A-Z, a-z, 2-9 omitiendo caracteres fácilmente confusos como L, l, 1, O, 0, etc.). Finalmente, usamos esa tabla de búsqueda para codificar en base 54 el entero de 64 bits. Los bits altos eran aleatorios, los bits bajos eran aleatorios, pero los bits centrales eran secuenciales.
El resultado final fue un código que era mucho más pequeño que un guid y parecía aleatorio, aunque no lo era en absoluto.
Nunca estuve satisfecho con esta implementación en particular. ¿Qué habrías hecho?
¿Por qué necesita el valor secuencial? ¿Tienes que volver a eso? En caso afirmativo, use una función criptográfica para encriptar su número secuntario con una clave secreta y codifique el cifrado con el alfabeto de su elección. – Oli