Me gustaría generar una identificación corta y única sin tener que verificar las colisiones.Generación única de ID PHP corta usando auto_increment?
Actualmente hago algo como esto, pero el ID que actualmente genero es aleatorio y la comprobación de colisiones en un bucle es molesta y se volverá costosa si el número de registros crece significativamente.
Normalmente, preocuparse por las colisiones no es un problema, pero la ID única que quiero generar es una cadena única corta de 5-8 caracteres, alfanumérica, como tinyurl.
EDITAR: Me gustaría comenzar con 5 caracteres y si llego a 60 millones de entradas, entonces vaya a 6 ... y así sucesivamente.
Para este fin, estaba pensando que podría usar un valor auto_increment que está oculto a los usuarios, y presentarlos en su lugar con un MD5
o algún otro método para generar una cadena única a partir de eso.
Las cadenas generadas no deberían parecer lineales, por lo que simplemente convertir el ID autoincrementado en base 36
[0-9A-Z] es un poco demasiado simplista, pero una función como esa es a dónde voy con esto.
EDITAR: La seguridad no es un problema, ya que no se utilizará para proteger la información. Es simplemente un atajo a una cadena más larga. Gracias.
Gracias por sus sugerencias y disculpe el retraso. Dentista ..
Me gusta esta idea. ¿Tienes algún código para mí? 1-60000000 mapeo a una cadena alfa numérica de 5 caracteres? –
Lo siento, no estoy confiando en mis matemáticas a esta hora del día, así que es una de 31 bits. Para uno de 30 bits, tendría exactamente 5 (significativo, es decir, sin el relleno = 's) caracteres después de base64_encode, pero no pude encontrar un conjunto de parámetros para eso. – Wim
Creo que este puede funcionar para uno de 30 bits: a = 357913942, c = 1, m = 1073741823 (Si no me equivoco, cumple los criterios en el artículo de Wikipedia para tener un archivo completo período: m = 2 ** 31-1 = 3 ** 2 * 7 * 11 * 31 * 151 * 331, c = 1 por lo que obviamente es coprime con m, y a-1 = 3 * 7 * 11 * 31 * 151 * 331 que es divisible por todos los factores primos de m ...) – Wim