Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate secure random number uniformly over a range in Java

How do I generate a secure uniform random number within a range? The range could be between 0 to 100. (The upper bound is not a power of 2).

java.security.SecureRandom seems to provide the range 0..2^n.

like image 317
anoopelias Avatar asked Feb 26 '15 12:02

anoopelias


2 Answers

You can do

Random rand = new SecureRandom()
// 0 to 100 inclusive.
int number = rand.nextInt(101);

or

// 0 inclusive to 100 exclusive.
int number = rand.nextInt(100);

Note: this is more efficient than say (int) (rand.nexDouble() * 100) as nextDouble() needs to create at least 53-bits of randomness whereas nextInt(100) creates less than 7 bits.

like image 129
Peter Lawrey Avatar answered Sep 24 '22 06:09

Peter Lawrey


Try below code snap

    SecureRandom random = new SecureRandom();

    int max=50;
    int min =1;

    System.out.println(random.nextInt(max-min+1)+min);
like image 42
Snehal Patel Avatar answered Sep 22 '22 06:09

Snehal Patel