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

How to create a random 16 digits number, with specific first digits?

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


首先,您需要生成一个随机的14位数字,就像您所做的那样:

1
long first14 = (long) (Math.random() * 100000000000000L);

然后在开头添加52

1
long number = 5200000000000000L + first14;

另一种方法同样有效,而且可以节省内存,因为Math.random()创建了一个内部Random对象:

1
2
3
4
5
6
7
//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;

注意,与Math.random()不同,nextLong() % n不会提供完全随机分布。但是,如果您只是生成测试数据,而且不需要加密安全,那么它也可以工作。由你决定用哪一个。


1
2
3
4
5
6
7
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));


您可以生成14个随机数字,然后在"52"开头追加。例如。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
    }
}


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