有哪些Java库可以提供从给定字符集生成唯一随机字符串组合的功能?

4

有哪些Java库可以提供从给定的字符集生成唯一随机字符串组合的功能?

假设我有这些字符集:[a-zA-Z0-9]

并且我需要从该字符集中生成一个4个字符的字符串,以避免碰撞。


你可能也想看看这个问题/答案:https://dev59.com/snVD5IYBdhLWcg3wQJKT - c00kiemon5ter
@xybrek:62的4次方并不算太多。碰撞很可能发生。 - TacticalCoder
java.math.BigInteger和java.security.SecureRandom可以解决您的问题。在https://dev59.com/snVD5IYBdhLWcg3wQJKT#41156上可以看到一个示例。 - Ravinder Reddy
3个回答

8

Apache Commons Lang拥有一个RandomStringUtils类,其中有一个方法可以接受一系列字符和数量参数,并按照您的要求进行操作。不过它不能保证避免碰撞,而且仅使用4个字符,您将很难实现这一点。


我的目标相当困难。我可能需要引入更多的角色。 - quarks

3
我需要从这个集合中生成一个4个字符的字符串,以减少碰撞的可能性。
比什么更不容易发生碰撞呢?有62^4 = 1480万个这样的字符串。由于生日悖论,如果您随机生成3800个字符串,则会出现50%的碰撞几率。如果这不可接受,那么没有任何库可以帮助您,您需要使用更长的字符串或通过增加一个整数并在基数为62时进行格式化来明确确保唯一性。

实际上,[a-zA-Z0-9] 是62个字符,所以是62的4次方,即1480万。这可能足够,也可能不够。如果你知道你每天不会生成超过62个字符,你可以使用前三个字符来计算天数,最后一个字符作为当天的计数器,这样可以保证在接下来的652年内都能正常使用。 - PapaFreud

1

如果您可以接受更长的哈希值,那么您肯定可以找到一些MD5库来完成这个任务。这是最常见的方法。许多网站使用它来生成密码哈希值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接