如何生成随机数?

时间:2013-09-08 19:44:16

标签: java android math random discrete-mathematics

在我的Android应用程序中,我需要生成随机数,

我的应用程序将在局域网中的许多Android设备上运行并使用随机数相互通信,我想生成一个随机且唯一的数字,在任何LAN应用程序中都不应该相同。

每当任何用户在他的设备和整个局域网中生成它时,它应该是唯一的。

任何想法,我将不胜感激???

4 个答案:

答案 0 :(得分:2)

鉴于问题评论中的澄清,这就是我要做的:建立一个(确定性的)方案,交换32位整数的位。交换任意多个。称之为“扰乱者”。

然后只计算整数;在每一个上都叫“扰乱者”。

由于交换方案的确定性,保证了唯一性,但是速度快但不能保证密码学安全。但请注意,通常这将具有较差的统计随机性属性,因此当需要均匀分布的随机数时(例如蒙特卡罗),不要使用它。但我认为它应该满足你的要求。

答案 1 :(得分:2)

我不熟悉Android。但是,您的问题似乎可以通过UUID或通用唯一标识符来解决。快速谷歌收益率this page

特别是,您正在寻找方法randomUUID()根据RFC 4122生成变体2,版本4(随机生成的数字)UUID。

答案 2 :(得分:1)

这是生成随机数的方法:

Random r = new Random();
int random = r.nextInt(100); // returns a value between 0 (incl) and 100 (excl)

Random r = new Random();
int random = r.nextInt(100) + 20; // returns a value between 20 (incl) and 120 (excl)

关于您的数字应该是唯一的问题,您可能以某种方式保存每个生成的数字。然后,当绘制新的随机数时,如果已生成新的随机数,则检查保存的数字。如果是这样,请重新绘制。

Java随机文档:http://docs.oracle.com/javase/6/docs/api/java/util/Random.html

答案 3 :(得分:1)

我实际上发现你的要求是矛盾的。有效的随机序列不会生成唯一值,否则它不是随机的。我的意思是你不需要任何随意的东西你只需要数字是唯一的。

要为每个网络节点生成唯一编号,很容易将机器ip或mac地址与时间结合起来。要获得时间,只需执行System.currentTimeMillis();获取您的IP地址,然后使用此处的示例how to get mac address in Java。结合这两个数字将为您带来独特性。