To záleží jak vysokou úroveň zabezpečení požaduješ. Například v Linuxu se k tomu používá sbírání entropie, sledováním nepravidelných dějů v počítači. Jeden z nich je pohyb myši uživatelem, který vytváří "šum", a ten se v takovém generátoru akumuluje společně s jinými událostmi. To je poměrně bezpečné a celkem levné.
Vysoce bezpečné je například sledování nějakého štěpného materiálu, třeba uranu, počítačem částic. Ty z něch vylétají v náhodných a zcela nepředvídatelných intervalech, nevýhodou podobných metod je poměrně vysoká finanční náročnost. Ono dát pár milionů dolarů jenom za opravdu perfektní simulaci kostky na "Člověče, nezlob se" asi nemá úplně smysl.
Jednoduchý a nepříliš bezpečný způsob je funkce pro generování
pseudonáhodné posloupnosti. Jeho základem je takzvané "semínko" (seed), a s ním se při každém čtení provádí nějaká posloupnost úkonů, obvykle matematických a bitových operací, které změní jeho stav v určitém rozsahu.
Příklad:
Při spuštění programu se seed nastaví na libovolnou hodnotu, například podle systémových hodin. To zaručuje, že při dalším spuštění programu v něm bude vznikat jiná posloupnost čísel. Takže třeba v tuhle chvíli to bude
165241. Pro jednoduchost použijeme šestnáctibitovou celočíselnou proměnnou s rozsahem kladných čísel 0..65535, takže její obsah bude zbytek po dělení 65536, tudíž 165241 modulo 65536 =
34169.
Pokud potřebuješ "vylosovat náhodné číslo", provedeš tenhle výpočet:
A protože se výsledek ořízne na spodních šestnáct bitů, stane se opět tohle:
No a vyjde ti číslo
33398.
Při opakování to bude
18123.
Při dalším
60865.
Pak
34941.
61018.
3215.
Atd.
Pokud to budeš dělat dostatečně dlouho, projdeš všech 65536 možností a posloupnost se bude opakovat. Když použiješ jiné konstanty nebo jiný vzorec, nemusíš ani všechny ty možnosti použít a bude se těch čísel opakovat jenom pár, což je ještě horší.