首页 > 解决方案 > 如何确保随机产生的值在 Java 中是唯一的

问题描述

在生成随机值时,我需要确保该generateUserID()方法每次都生成一个“随机且唯一”的值。

private String generateUserID(String prefix, int digitNumber) 
{
    return prefix + String.valueOf(digitNumber < 1 ? 0 : new Random()
            .nextInt((9 * (int) Math.pow(10, digitNumber - 1)) - 1)
            + (int) Math.pow(10, digitNumber - 1));
}    

此方法的输出不应与另一个值相同。因此,我需要重构代码,但我不能使用任何循环。

标签: javarandom

解决方案


在将数据记录从一个系统移动到另一个系统时,我使用这样的随机 ID。我通常使用 UUID(通用唯一标识符),因此我可以清楚地区分任何一条记录与其任何(可能数百万)对应项。

Java 对它们有很好的支持。尝试这样的事情:

import java.util.UUID;

private String generateUserID(String prefix, int digitNumber) {
  String uuid = UUID.randomUUID().toString();
  return prefix + digitNumber + uuid;  // Use the prefix and digitNumber however you want.
}

JavaDocs: https://docs.oracle.com/javase/7/docs/api/java/util/UUID.html#randomUUID()


推荐阅读