First, explore the Mersenne Twister. This should be a great basis for your problem.
Mode 1: Use the values ββdirectly. Given that the values ββare 32 bits, depending on the ranges of min and max, modulo (max-min + 1) can be quite good, although there is a slight bias if this interval is not equal to two. In addition, you can treat the value as a floating point value between 0 and 1 and perform some additional operations. There may be other solutions for getting an equal distribution with integers, but I have not yet studied this specific problem. Wikipedia can help here.
Mode 2: use an array that you fill with min..max and then shuffle it. Return the shuffled values ββin order. When you go through the array, replenish and drag.
Mode 3 is the most difficult. A small number of random values ββshow clusters, i.e. If you count occurrences of different values, you have an average value, and the number of values ββis usually above or below this average. As far as I understand your connection, people expect that randomness will have all the meanings on average. Therefore, count the occurrences and give different values ββa higher probability, depending on their distance to the average value. This may be enough to simply reuse mode 2 with multiple arrays, for example. use an array 10 times larger (max-min + 1), fill it with 10x min, 10x min + 1, etc. and shuffle it. Every complete 10 rounds you have exactly equal numbers.
EDIT in mode 3:
Say that you have min = 1 and max = 5. You count events. If they all have the same probability (that they should use a good random generator), then this probability for each value will be 0.2, since the probability values ββare up to 1.0:
Value Occur Probability 1 7x 0.2 2 7x 0.2 3 7x 0.2 4 7x 0.2 5 7x 0.2 Average: 7x
But now let's say that 3 happened only 5x and 5 happened 9x. If you want to maintain an equal distribution, then 3 should be more likely to catch up with the average, and 5 should be less likely to not grow so fast until all other values ββare reached. However, all individual probabilities should be up to 1.0:
Value Occur Probability 1 7x 0.2 2 7x 0.2 3 5x 0.3 4 7x 0.2 5 9x 0.1 Average: Still 7x
In different cases, there should also be different probabilities depending on their distance to the average:
Value Occur Probability 1 10x 0.05 2 4x 0.35 3 5x 0.3 4 7x 0.2 5 9x 0.1 Average: Still 7x
Not that trivial to implement, and most likely very slow, because the random generator still provides equal probabilities, so modified mode 2 can be a pretty good choice.