如何生成随机的7个字符的字母数字字符串?

时间:2013-09-05 13:35:18

标签: java

我做了这样的事情,但没有奏效。 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;
}

1 个答案:

答案 0 :(得分:5)

  

在任何情况下我都不会获得重复值。

由于Birthday Paradox,不可能100%保证唯一值(特别是给定7个字符的字符串)。给定一个包含48个字符的字符集,随机选择7,只有110,000个随机值后,你有1%的碰撞几率。

您可以通过做两件事来帮助减轻这种情况。

  1. 使用更大的字符集。
  2. 增加随机值的长度。
  3. 使用64个字符的字符集并随机选择10将大大降低发生碰撞的几率,在160,000,000个随机值后降至1%。

    我建议只使用currentTimeMillis类(来自于当前时间下降到纳秒。)

    Random