The requirement is a desire for repeatable results, which may arise from attempting to debug your software or, of course, from attempting to redo what it does:
We will "never" reproduce these two findings because I specifically requested something "random":
R> an example (LETTERS, 5)
[1] "K" "N" "R" "Z" "G" "K" "N" "R" "Z" "G"
R> an example (LETTERS, 5)
[1] "L" "P" "J" "E" "D" "L" "P" "J" "E" "D" "L" "P" "
These two, on the other hand, are identical since the seed was planted by me:
R> sample.seed(42); set.seed(42); (LETTERS, 5)
[1] set.seed(42); sample "X" "Z" "G" "T" "O" R> set.seed(42); sample "X" "Z" "G" "T" "O" R> set.seed(42); (LETTERS, 5)
[1] R> "X" "Z" "G" "T" "O" R> "X" "Z" "G" "T" "O" R> "X" "Z
There's a lot of information out there; Wikipedia is a fantastic place to start. In essence, these RNGs are known as Pseudo Random Number Generators because they are totally algorithmic: given the input, they generate a random number.