We review the basic principles underlying the design of uniform random number generators, their quality requirements, their theoretical analysis, and their empirical testing. We explain why we prefer algorithmic generators to physical devices for simulation applications. We outline the most common construction techniques. We find that the generators provided in popular commercial software, as well as certain generators having huge periods, are often among the least reliable. We recommend better ones. For simulation, we explain why we favor generators with multiple streams and substreams, give examples of their use, and recommend specific ones.