用Java创建唯一随机数

问题描述 投票:-4回答:2

我正在用Java创建10位随机唯一数字,但是数字在某些数字之后会重复,我想创建即使服务器重启也不应重复的唯一数字,我想要类似UUID.randomUUID( )表示10位数字。

我使用下面的代码

(long) Math.floor(Math.random() * 9_000_000_000L) + 1_000_000_000L

此代码未生成唯一的10位数字。

java
2个回答
0
投票
鉴于存在有限数字(10 ^ 10)10位数字,您不能无限期地这样做,因为最终您将用完新的唯一数字。

[Apache Commons Lang库具有方法RandomStringUtils.randomNumeric(int count),顾名思义,该方法会产生给定长度的String,其中包含随机数字,然后可以使用long将其映射到Long.parseLong()

使用此功能,您可以生成随机值。然后,您必须存储这些值(取决于部署情况,可能存储在某种数据库中),并验证以前没有使用过任何新值。

请注意,此方法将不检查前导零,因此,如果这对您很重要,则也必须这样做。

还要注意,不重复值的时间越长,值变得越可预测(因此随机性就越小)。如果您将此用于加密/安全意识的目的,则

必须使用加密安全的随机数生成器(请查看JDK中的SecureRandom)。

© www.soinside.com 2019 - 2024. All rights reserved.