gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:23:01 25 4
gpt4 key购买 nike

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

最佳答案

I won't get duplicate values in any scenario.

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

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

  1. 使用更大的字符集。
  2. 增加随机值的长度。

使用 64 个字符的字符集并随机选择 10 个字符会大大降低发生碰撞的几率,在 160,000,000 个随机值后降至 1%。

与其使用 currentTimeMillis 生成一个值,如果您在同一毫秒内生成两个值会导致冲突,我建议只使用 Random 类(从当前时间播种到纳秒)。

private static final String CHARACTER_SET = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
private static Random rnd = new Random();

public static String randomString(int length){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < length; i++){
builder.append(CHARACTER_SET.charAt(rnd.nextInt(CHARACTER_SET.length())));
}
return builder.toString();
}

关于java - 如何生成一个随机的 7 字符字母数字字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18637841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com