Генерация безопасного случайного числа с SecureRandom

Как я могу сгенерировать 6- значное число, используя SecureRandom класс Java?

Я пытаюсь следующий код для генерации случайных чисел:

SecureRandom secureRandom = new SecureRandom();
int secureNumber = secureRandom.nextInt();

Он генерирует случайные числа любой длины, включая отрицательное число. Я не нахожу никакого метода в SecureRandom класс для предоставления диапазона чисел. Я хочу сгенерировать случайное число из 6 цифр

6 ответов

Может быть, с помощью этого кода?

      String.format("%06d", secureRandom.nextInt(999999));

Вы можете сделать что-то вроде этого:

static String generate(int len){
   SecureRandom sr = new SecureRandom();
   String result = (sr.nextInt(9)+1) +"";
   for(int i=0; i<len-2; i++) result += sr.nextInt(10);
   result += (sr.nextInt(9)+1);
   return result;
}

Тестовое задание:

public static void main(String[] argv){
   for(int i=3; i<25; i++) System.out.println(generate(i));
}

Выход:

639
1617
84489
440757
9982141
28220183
734679206
1501896787
29547455245
417101844095
9997440470982
24273208689568
235051176494856
9515304245005008
73519153118911442
665598930463570609
9030671114119582966
96572353350467673335
450430466373510518561
9664395407658562145827
26651025927755496179441
421157180102739403860678

Просто сделал это с массивом

int[] arr = new int[6];
Random rand = new SecureRandom();
for(int i= 0; i< 6 ; i++){
    // 0 to 9
    arr[i] = rand.nextInt(10);   
}

Не знаю, нужно ли вам это в другом типе (если вы хотите int, посмотрите здесь: Как преобразовать массив int в int?

Это создаст строку из 6 случайных цифр.

SecureRandom test = new SecureRandom();
int result = test.nextInt(1000000);
String resultStr = result + "";
if (resultStr.length() != 6) 
    for (int x = resultStr.length(); x < 6; x++) resultStr = "0" + resultStr;
System.out.println(resultStr); // prints the 6 digit number

Должно работать довольно хорошо. Протестировано так, чтобы оно выплевывало 1000 чисел, и все они имели длину 6 цифр, включая начальные нули, для которых первоначально выбранное случайное число было меньше 100 000.

Это сработало для меня.

new SecureRandom().nextBytes(values);
int number = Math.abs(ByteBuffer.wrap(values).getInt());
while (number >= 1000000) {
     number /= 10;
}

Вот как вы это сделаете, используя Java IntStream

      private final SecureRandom secureRandom = new SecureRandom();

public String generateCode() {
    return IntStream.iterate(0, i -> secureRandom.nextInt(10))
            .limit(6)
            .collect(StringBuilder::new, StringBuilder::append, StringBuilder::append).toString();
}
Другие вопросы по тегам