【问题标题】:How unique RandomStringUtils.randomAlphanumeric(int count) is?RandomStringUtils.randomAlphanumeric(int count) 有多独特?
【发布时间】:2014-04-06 08:52:06
【问题描述】:

我需要生成一个唯一的字母数字 id,我可以使用 UUID,但生成的字符串比我需要的长,我想要一个长度为 8(或多或少)的生成字符串。 因此我想到了使用 Apache lang 的 RandomStringUtils.randomAlphanumeric(int count)。 我知道没有 100% 保证字符串是唯一的,所以我想知道是否有人知道使用时重复的概率,例如计数 8 还是 9? 谢谢。

【问题讨论】:

  • 获取 UUID 的 hashCode
  • 您可以将生成的字符串存储在某处,并在生成时检查存储以确保唯一性。

标签: java uuid uniqueidentifier


【解决方案1】:

快速查看 javadoc,它似乎只从 ascii 字母和数字中挑选字符,所以 36 个字符。因此,得到一个 8 个字符的字符串的概率是 36^8 ~ 3E12。对于 9 个字符,概率为 36^9 ~ 1E14。

【讨论】:

  • 感谢您的回复,但恐怕它有点复杂。小写和大写有区别吗?最重要的是,我猜这取决于所使用的算法的随机性。
【解决方案2】:

它与 java.util.Random 一样随机,在默认实现中。并且它认为大写是不同的。示例返回:BdODmKWjGtaKeFyYsNCbOPRzquNIIRMiEFPjqTSgbfMvMeZgNKihEdUdUXUniHUh

所以你的数学是:1/2.18340106e14。

如果您在非分布式系统中需要一个唯一 ID,您或许应该选择 AtomicInteger,或为此目的使用某个库。

【讨论】:

    猜你喜欢
    • 2011-05-21
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2011-04-27
    • 2012-09-06
    相关资源
    最近更新 更多