首页 > 编程知识 正文

java产生随机数的代码,java 产生随机数

时间:2023-05-04 23:56:27 阅读:32198 作者:1102

Java随机数和UUID#

Java随机数

在Java项目中,随机数通常通过Math.Random方法和Random类获取,前者通过生成Random类的实例来实现。

以这种方式生成的是利用线性同馀公式使用48位种子生成的伪随机数流的集合。 在Java中,随机数的生成取决于种子,随机数和种子之间的关系遵循以下两个规则:

根据种类的不同,会产生不同的随机数。

种子是相同的,即使实例不同也会产生相同的随机数。

设定种子有两种方法。

randomr=new random (长串);

或Random r=new Random (; r.setseed(1; 也就是说,种子是1。

对于一组随机数,记住生成的种子就可以了。

例如代码:

公共类客户端{

publicstaticvoidmain (字符串[ ] args ) {

randomr=newrandom(1;

for(intI=0; i 4; I ) {

系统. out.println (r.nextint (100 ); //0100

}

}

}

无论执行多少次,生成的随机数序列都必须是

85、88、47和13

Random类的默认种子(无参数结构)是System.nanoTime )的返回值。 请注意,该值是从某个时间点开始的纳秒。 固定时间点因操作系统和硬件而异。 也就是说,纳秒的值因操作系统而异,但即使是同一操作系统,纳秒的值也因时间而异,随机数当然也不同。 (顺便说一下,System.nanoTime不能用于计算日期。 这是因为“参照”的时间点不确定,纳秒的值可能为负值。 这一点与System. currentTimeMillis不同。 )

Java UUID

通用唯一标识符(uid )全局唯一标识符是指在一台计算机上生成的数字,它确保同一时间在空中的所有计算机都是唯一的。 uID是长度为16字节(128位)的id,以十六进制表示,通常表示为类似于f81 D4 FAE-7 dec-11d0- a765-00 a0c 91 e6BF 6。 算法的中心思想是将机器网卡、当地时间和随机数进行组合生成UUID。 理论上,如果一台机器每秒生成10000000个UUID,就可以保证(从概率上来说) 3240年不重复。

不需要中心认证,支持自动生成,一台机器每秒10M次(100纳秒数量级,其隐含原因可以区分的最小时间单位为100ns,以时间为因子,连续生成两个UUID的时间至少为100ns间隔易于访问、分配、排序和搜索。

代码示例:

import java.util.UUID;

公共类测试{

publicstaticvoidmain (字符串[ ] args ) {

UUID uuid=UUID.randomUUID (;

system.out.println(uuid; //生成的uuid用-分隔

String str=uuid.toString (;

string temp=str.substring (0,8 ) str.substring (9,13 ) str.substring (14,18 ) str.substring (19,23 ) str

system.out.println(temp );

}

}

UUID版本1 :基于时间的UUID

基于时间的UUID是通过计算当前时间戳、随机数和机器MAC地址获得的。 由于算法使用了MAC地址,因此此版本的UUID保证了全球范围内的唯一性。 但同时,使用MAC地址也会带来安全问题。 这就是这个版本的UUID受到批评的地方。 如果APP应用程序仅用于局域网,则还可以使用降级算法。 使用IP地址而不是MAC地址--Java的UUID经常这样实现(当然也考虑到了获取MAC的困难)。 但是,时间因素的顺序是时间下位为上位,上位为下位,所以不适合主键,COMB是可能的。

uuid版本3 :基于名称的uuid(MD5 )。

基于名称的UUID是通过计算名称和命名空间的MD5散列获得的。 此版本的UUID确保了在同一命名空间中使用不同名称生成的UUID的唯一性。 UUID在不同命名空间中的唯一性; 在相同的命名空间中重复生成相同名称的UUID是相同的。

UUID版本4 :随机UUID

基于随机数或伪随机数生成UUID。 这个UUID重复的概率可以计算,但随机的就像买彩票一样。 虽然指望发财是不可能的,但狗屎运一般都会在不经意间到来。

uuid版本5 :基于名称的uuid(sha1 ) )。

与版本3的UUID算法类似,只是使用sha1 (安全hashalgorithm1)算法计算哈希值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。