note tomazos <b>Update:</b> Your solution is cool but \$max is not guaranteed to be a power of 2. In fact, it almost certainly isn't. <p> I just scribbled this on a piece of paper, I think I heard something about it to do with the RSA encryption algorithm once... <p> <code> \$result = (\$prime_number * \$input + \$seed) % \$max; </code> <p> Example for \$max = 10, \$prime_number = 7 and \$seed = 5.. <p> <code> shuffle(5,10,0) == (7 * 0 + 5) % 10 == 5 % 10 == 5 shuffle(5,10,1) == (7 * 1 + 5) % 10 == 12 % 10 == 2 shuffle(5,10,2) == (7 * 2 + 5) % 10 == 19 % 10 == 9 shuffle(5,10,3) == (7 * 3 + 5) % 10 == 26 % 10 == 6 shuffle(5,10,4) == (7 * 4 + 5) % 10 == 33 % 10 == 3 shuffle(5,10,5) == (7 * 5 + 5) % 10 == 40 % 10 == 0 shuffle(5,10,6) == (7 * 6 + 5) % 10 == 47 % 10 == 7 shuffle(5,10,7) == (7 * 7 + 5) % 10 == 54 % 10 == 4 shuffle(5,10,8) == (7 * 8 + 5) % 10 == 61 % 10 == 1 shuffle(5,10,9) == (7 * 9 + 5) % 10 == 68 % 10 == 8 </code> <p> So that works for 7 and 10. Does it work for any \$max and any \$prime_number? If not what conditions will it work for? I am no good with proofs. <p> -Andrew. <p> <!-- Node text goes above. Div tags should contain sig only --> <div class="pmsig"><div class="pmsig-78023"> <hr>Andrew Tomazos&nbsp;&nbsp;|&nbsp;&nbsp;<a href="mailto:andrew@tomazos.com">andrew@tomazos.com</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="http://www.tomazos.com">www.tomazos.com</a> </div></div> 552199 552202