如何创建一个随机的16位数字,具有特定的第一个数字?

时间:2015-01-08 15:41:35

标签: java

我想在java中创建一个随机生成的16位数字。但是我需要前两个数字为" 52"。例如, 52 89-7894-2435-1967。  我正在考虑使用随机生成器并创建一个14位数字,然后添加一个整数5200 0000 0000 0000。  我尝试寻找类似的问题,但却找不到有用的东西。我不熟悉数学方法,也许它可以解决我的问题。

4 个答案:

答案 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)

  • 创建一个14位随机数字。 Math.random
  • 在“52”String开始时连接到它。
  • 使用Integer.parseInt(String)方法
  • 转换字符串