我想在java中生成随机标识符。标识符应该有一个固定的大小,两次生成相同标识符的概率应该很低(系统大约有50万用户)。另外;标识符应该很长,以至于通过暴力攻击“猜测”它是不可行的。
到目前为止,我的方法是这样的:
String alphabet = "0123456789ABCDE....and so on";
int lengthOfAlphabet = 42;
long length = 12;
public String generateIdentifier(){
String identifier = "";
Random random = new Random();
for(int i = 0;i<length;i++){
identifier+= alphabet.charAt(random.nextInt(lengthOfAlphabet));
}
return identifier;
}
我通过数据库中的约束来强制执行唯一性。如果我点击了一个已经创建的标识符,我将继续生成,直到找到一个未使用的标识符。
我的假设是我可以调整 lenghtOfAlpahbet 和 length 以获得我正在寻找的属性:
- 罕见的碰撞
- 用蛮力是不可行的
- 标识符应尽可能短,因为系统用户必须键入它。
这是一个好方法吗?有人对“长度”的价值有任何想法吗?