我想在java中创建一个随机生成的16位数字。但是我需要前两个数字为" 52"。例如, 52 89-7894-2435-1967。 我正在考虑使用随机生成器并创建一个14位数字,然后添加一个整数5200 0000 0000 0000。 我尝试寻找类似的问题,但却找不到有用的东西。我不熟悉数学方法,也许它可以解决我的问题。
答案 0 :(得分:5)
首先,您需要生成一个随机的14位数字,就像您已经完成的那样:
long first14 = (long) (Math.random() * 100000000000000L);
然后在开头添加52
。
long number = 5200000000000000L + first14;
另一种方法同样有效,并且会节省内存,因为Math.random()
会创建一个内部Random
对象:
//Declare this before you need to use it
java.util.Random rng = new java.util.Random(); //Provide a seed if you want the same ones every time
...
//Then, when you need a number:
long first14 = (rng.nextLong() % 100000000000000L) + 5200000000000000L;
//Or, to mimic the Math.random() option
long first14 = (rng.nextDouble() * 100000000000000L) + 5200000000000000L;
请注意,与nextLong() % n
不同,Math.random()
不会提供完全随机的分布。但是,如果您只是生成测试数据并且它不必具有加密安全性,那么它也可以正常工作。这取决于你使用哪一个。
答案 1 :(得分:3)
Random rand = new Random();
String yourValue = String.format((Locale)null, //don't want any thousand separators
"52%02d-%04d-%04d-%04d",
rand.nextInt(100),
rand.nextInt(10000),
rand.nextInt(10000),
rand.nextInt(10000));
答案 2 :(得分:2)
您可以生成14个随机数字,然后在开头附加" 52"。 E.g。
public class Tes {
public static void main(String[] args) {
System.out.println(generateRandom(52));
}
public static long generateRandom(int prefix) {
Random rand = new Random();
long x = (long)(rand.nextDouble()*100000000000000L);
String s = String.valueOf(prefix) + String.format("%014d", x);
return Long.valueOf(s);
}
}
答案 3 :(得分:0)
Math.random
String
开始时连接到它。Integer.parseInt(String)
方法