我做了这样的事情,但没有奏效。 base48Encode方法参数我以毫秒为单位通过了当前系统时间
private static final String CHARACTER_SET = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
public static String base48Encode(double d) {
Double num = Double.valueOf(d);
Integer length = CHARACTER_SET.length();
String encodeString = new String();
while (num > length) {
encodeString = CHARACTER_SET.charAt(num.intValue() % length) + encodeString;
num = Math.ceil(new Double(num / length) - 1);
}
encodeString = CHARACTER_SET.charAt(num.intValue()) + encodeString;
return encodeString;
}
答案 0 :(得分:5)
在任何情况下我都不会获得重复值。
由于Birthday Paradox,不可能100%保证唯一值(特别是给定7个字符的字符串)。给定一个包含48个字符的字符集,随机选择7,只有110,000个随机值后,你有1%的碰撞几率。
您可以通过做两件事来帮助减轻这种情况。
使用64个字符的字符集并随机选择10将大大降低发生碰撞的几率,在160,000,000个随机值后降至1%。
我建议只使用currentTimeMillis
类(来自于当前时间下降到纳秒。)
Random