Utilice una concatenación de un número incrementado único y un número generado aleatoriamente.
El número incrementado único garantiza que el resultado sea único, y el número generado aleatoriamente lo hace difícilmente adivinable.
Esto es sencillo y garantizado para tener no colisión (1). El resultado es incremental , parcialmente aleatorio y no predecible (siempre que la parte del número aleatorio se genere con un buen PRNG).
(1):Tienes que rellenar id
y random
con ceros, o para separarlos con algún carácter que no sea un dígito.
Con una base de datos MySQL, esto se traduce en:
CREATE TABLE foo (
id int not null auto_increment,
random int not null,
...
primary key (id)
);