java - 如何确保随机产生的值在 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));
}
此方法的输出不应与另一个值相同。因此,我需要重构代码,但我不能使用任何循环。
解决方案
在将数据记录从一个系统移动到另一个系统时,我使用这样的随机 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()
推荐阅读
- sql - 新的 SQL 学习者,使用 SQL Server Mang。工作室。我收到错误消息,消息 2714,级别 16,状态 6,第 3 行已经有一个名为
- python - 使用 Python 或 pyspark 读取基于位置的 CSV 文件
- android - 为什么我下载依赖项时我的 Flutter 应用程序无法编译?
- node.js - 如何使用 Firestore 从 DialogFlow fullfilment 上的 snap 中获取地图数组
- javascript - https 在 javascript 中发布类似于带有标头和参数的 curl -d 带有“请求”模块 nodejs npm
- javascript - 我有 google drive pdf 的共享链接,我必须使用 angular7 下载该 pdf。请告诉我该怎么做
- material-ui - 如何为material-ui-dropzone的容器设置样式
- python-3.x - 如何在 python 中将包含超出范围 utf-8 或 16 的字符的 unicode 字符串转换为二进制或十六进制?
- django - 如何修复Django中的自动登录?
- mongodb - 如何在 MongoDB Atlas 中获取“完整的数据库名称”?