我需要由6位数字组成的学生票的ID。例如,000004或123456,并且它必须是唯一的,因此请不要重复。我想使用UUID进行创建,有点不明白如何进行限制。
答案 0 :(得分:2)
请参阅问题How to generate random integers within a specific range in Java?。
int min = 1 ;
int max = 999_999 ;
int randomNum = ThreadLocalRandom.current().nextInt( min , max + 1 );
由于范围很小(一百万),因此您经常会发生冲突(重复)。
为避免重复,您必须收集所有使用的数字,并在每次尝试生成标识符时搜索该集合。您必须以线程安全的方式执行此操作。
推荐不用于您的目的。
随机的六位数字的大小不足以在任何重要的上下文中用作标识符。这就是为什么将员工证章和类似用例的编号按顺序(000001、000002等)完成的原因之一。
如果您想要一个真正通用的唯一标识符,请使用Universally Unique Identifier。
作为128位值,您所拥有的值的天文学范围要比百万位数大。 UUID的Version 1 type消除了任何实际的冲突可能性。这就是为什么它被发明和标准化的原因。
对于少数情况(例如您的百万学生),即使是大多数随机的版本4也足够了。这是UUID.randomUUID
生成的版本。