The seed is what defines the start of the sequence. Every time you request a new number from the RNG created with that seed you get a different one, but the sequence is always the same.
This allows you to test the RNG: By passing a pre-defined seed you can check that the sequence is always the same. You can also check with different seeds if the distribution is flat or has spikes.
Incidentally, this also allows to "reverse-check" a code: let's say you generate a certain number of codes starting from a seed. If you receive the code and you somehow know the seed used and the number of codes generated with that seed, you can know if the code belongs to that seed's sequence, therefore validating it.
By passing a semi-random number (like the current timestamp) to a RNG at runtime, you get a random sequence. As random as a computer can generate, naturally.