Skip to main content
🟢 Beginner

Véletlenszám generátor

Generáljon véletlen számokat egy tartományon belül. Tökéletes játékokhoz, döntésekhez és statisztikákhoz. Ingyenes online matematikai kalkulátor azonnali, pontos eredményekkel.

Mi az a véletlenszám-generátor?

Egy véletlenszám-generátor (RNG) olyan eszköz vagy algoritmus, amely számokat termel anélkül, hogy bármilyen megfigyelhető mintát mutatna — minden kimenet statisztikailag független a korábbi kimenetektől, és minden érték egyenlő valószínűséggel jelenik meg a tartományban. A véletlenszámok alapvetőek a statisztikában, a játékban, a kriptográfiában, a tudományos szimulációban és a számítógépes programozásban.

A valódi véletlenség a fizikai jelenségekből származik, amelyek magukban véve előre nem jósolhatók: radioaktív bomlás, légköri zaj, elektronikus körökben létrejövő hőzaj, vagy kvantum-tunneling események. A hardveres RNG-k ezeket a jelenségeket mérnek, hogy valódi véletlenszámokat generáljanak. A random.org szolgáltatások például a rádiókészülékekből származó légköri zajt gyűjtenek össze, hogy valódi véletlenszámokat nyújtsanak.

A számítógépes generált véletlenszámok technikailag pseudovéletlenszámok — megjelennek úgy, mint véletlenszámok, de teljesen meghatározottak egy kezdeti érték, a mag által. Adott maggal egy pseudovéletlenszám-generátor (PRNG) pontosan ugyanazt a sorozatot generálja. Ez valójában hasznos a tudományos szimulációk reprodukálhatóságában: állítsa be a magot, rögzítse, és később ismételten reprodukálhatja eredményeit.

Hogyan működnek a pseudovéletlenszám-generátorok?

A modern PRNG-k matematikai algoritmusokat használnak a sorozatok kiváló statisztikai tulajdonságainak létrehozására. A legelterjedtebb algoritmus a Mersenne Twister (MT19937), amelyet Matsumoto és Nishimura fejlesztett ki 1997-ben. 2^19937 − 1 (nagyjából 6 000 számjeggyel) hosszúságú periódusával rendelkezik, megfelel az összes szabványos statisztikai tesztnek a véletlenszerűségre, és a Python, PHP, Ruby, R és számos más nyelv alapértelmezett véletlenszám-generátora.

Újabb algoritmusok a xoshiro/xoroshiro (nagyon gyors, kis állapot) és a PCG (Permuted Congruential Generator) (kiváló statisztikai minőségű, kis állapot). A kriptográfiai alkalmazásokhoz ezek a standard PRNG-k elégtelenek — a kriptográfiai biztonságos PRNG-k (CSPRNG-k) szükségesek, mert a standard PRNG-ket könnyen előre jelezhetik, ha egy támadó elég kimenetet ismer.

A webböngészők a crypto.getRandomValues() API-n keresztül biztosítanak hozzáférést egy CSPRNG-hez, amelyet ez a számológép használ véletlenszámok generálásához. Ez sokkal biztonságosabb, mint a Math.random(), amely egy egyszerű PRNG-t használ, és soha nem szabad használni biztonsági érzékeny alkalmazásokban.

AlgoritmusPeriódusSebességKriptográfiai?Használják
Math.random()Implementáció függőVery gyorsNemWebböngésző JS (nem kriptográfia)
Mersenne Twister2^19937 − 1GyorsNemPython, R, MATLAB
xoshiro256**2^256 − 1Very gyorsNemRust, .NET, Julia
PCG-642^128GyorsNemNumPy, számos nyelv
ChaCha20GyorsIgenLinux /dev/urandom, TLS
FortunaÁtlagosIgenmacOS, iOS, Windows

A véletlenszámok gyakori felhasználási területei

Játékok és szórakozás: Véletlenszámok a dobbal, a kártyák keverésével, a procedurális szinttervezéssel, a zsákmánykibocsátási rendszerekkel, a NPC viselkedésének véletlenszerűsítésével. A roguelike játékok (Nethack, Spelunky, Hades) egész tapasztalata a magas minőségű véletlenszerűségre támaszkodik, amely tisztességesnek és előre nem jósolhatónak tűnik.

Loterek és ajándéksorsolások: Véletlenszerű választás a díjakhoz, a nyereményekhez, a bírósági választáshoz, a draft választáshoz és bármely korlátozott erőforrások közötti tisztességes megosztáshoz. A valódi véletlenszerűség biztosítja a szimmetriát.

Tudományos szimuláció (Monte Carlo módszerek): A véletlenszámok hajtják a Monte Carlo szimulációkat, amelyek a komplex matematikai eredmények megközelítésére használják a véletlenszerű mintavételezést. A felhasználások közé tartozik a π becslése, a pénzügyi opciók árazása, a nukleáris reakciók modellezése, az időjárásjelentés és a gyógyszerinterakciók tanulmányozása.

Statisztika és kutatás: Véletlenszerű mintavételezés a felmérésekhez, véletlenszerű kiosztás a klinikai kísérletekben (randomizált kontrollált kísérletek), a bootstrap minták generálása a bizonyossági intervallumokhoz, és a gépi tanulásban a kereszthibridizálás mind véletlenszámokat igényel.

Kriptográfia és biztonság: Az alapértelmezett kulcs generálása a titkosításhoz, a session tokenek generálása, a CAPTCHA kihívások, az egyidejű jelszavak (OTP/2FA), a jelszó hasholásához használt só értékek és a kriptográfiai protokollokban a nonce értékek mind magas minőségű véletlenszámokat igényelnek. A gyenge véletlenszámok a kriptográfiai alkalmazásokban katasztrofálisak lehetnek — a valós világban is okoztak biztonsági megsértéseket.

Számítógépes programozás: Tesztdaták generálása, terhelési tesztelés, fuzzi (a szoftverekbe véletlenszerű bemenetek beadásával a hibák kiderítésére), A/B tesztelési kiosztás, keverési algoritmusok (mint a Spotify "keverés" funkciója), és szimulációs tesztelés.

Észségesség és statisztikai várhatóságok

Egy igazságos véletlenszám-generátor adja meg a tartomány minden értékének egyenlő valószínűségét. Egy 1–6-os tartományhoz (mint egy dobbal), minden szám megjelenik közelítőleg 1/6 ≈ 16,67%-os valószínűséggel sok dobás után. De rövid futások során a deviációk normálisak és várhatóak – ez a valószínűség valójában mondja el.

A nagy számok törvénye kimondja, hogy a kísérletek száma nőve, az megfigyelt gyakoriságok a teóriai valószínűségek felé konvergálnak. 12-szer dobja a dobot, és láthatja {1,3,5,6,2,1,4,3,2,6,5,4} – nem pontosan 2-2 száma. 60 000-szer dobja, és nagyon közel lesz 10 000-10 000 száma. Ezt a konvergenciát a törvény garantálja, de a rövid futások során nem.

A veszélyes játékos téveszméje a hibás hit, hogy a múltbeli eredmények befolyásolják a jövőbeliakat a független véletlenszerű eseményekben. 5 fejecske egymás után nem teszi a hátulütőt "megérdemeltnek". Minden dobás független; a pénzérmének nincs emlékezete. Ugyanúgy, a véletlenszám-generátor, amely mostanában 7-et produkált, nem kevésbé valószínű, hogy 7-et produkál a következő hívásnál.

TartományValószínűség egy értékreElvárt gyakoriság (1000-ban)Tipikus felhasználási eset
1–250%500Érmefordítás-szimuláció
1–616,67%167Doberendszimuláció
1–1010%100Tizedes kiválasztás
1–521,92%19Kártyalap
1–1001%10Percentil/általános felhasználás
1–1 000 0000,0001%0,001Lotószelvény-szimuláció

Véletlenszám-generálás a tudományban: Monte Carlo módszerek

A Monte Carlo módszerek véletlenszámokat használnak a megoldandó problémák megoldására, amelyek analitikailag nehéz vagy lehetetlenek. A neve a Monacói kaszinóra utal (természetesen), ezek a módszerek a nehéz determinisztikus problémákat valószínűségi problémává alakítják, amelyeket szimulációval megoldhatók.

π becslése: Véletlenszerűen generáljon pontokat egy egységnyi négyzetben (x, y mindegyik uniformis a [0,1]-ben). Számolja meg, hogy hány esetben esik bele a egységnyi körbe (x² + y² ≤ 1). A hányados π/4. 1 millió véletlenszerű ponttal meg lehet becsülni π-t 3–4 tizedesjegyre. Ez nem hatékony módja π számításának, de szépen mutatja a véletlenség erejét.

Finanszírozási modellezés: A Black-Scholes opció árazás és a Value at Risk számítások ezerféle lehetséges jövőbeli árfolyamútvonalat használnak véletlenszámokkal. Minden szimulációs útvonal egy lehetséges jövőt képvisel. A szimulációk millióinak eloszlásának megadja a portfólió visszajelzésének valószínűségi eloszlását.

Orvosi fejlesztés: A Monte Carlo szimulációk modellezik a gyógyszer molekulák kölcsönhatásait, előrejelzik, hogy mennyire valószínű, hogy egy kandidátum gyógyszer kötődik-e egy célcélpont-proteinhoz. Ez csökkenti a laboratóriumi kísérletek számát, milliárdok dollárt takarít meg a gyógyszerfejlesztésben.

Unikális véletlenszámok generálása (nélkül cserélés)

Sokszor szükség van olyan véletlenszámokra, amelyek nem ismétlődnek – például kártyalapok keverése, résztvevők csoportosítása vagy lottó nyertesek kiválasztása. Ez a nélkül cseréléses mintavételnek nevezett (ellentétben a nélkül cseréléses mintavétellel, ahol ugyanaz a szám többször is megjelenhet).

A standard algoritmus ehhez a Fisher-Yates keverés (ismertebb nevén Knuth keverés). Egy n elemű tömbre: kezdje a legutolsó elemmel, cserélje meg azzal egy véletlenszerűen kiválasztott elemmel a teljes tömbből (beleértve magát is), majd mozgassa a második legutolsó elemhez, cserélje meg azzal a maradékban lévő véletlenszerű elemmel, és folytassa. Ezzel elérhető egy egyenletesen véletlenszerű permúció O(n) időben.

Az értékek kiválasztásához k: hozzon létre egy tömböt az összes értékkel a tartományban, alkalmazza a Fisher-Yates-t, vegye ki az első k elemeket. Ezzel biztosítja, hogy minden k értékű kombináció egyenlő valószínűséggel jelenjen meg – egy igazán egyenletes mintavétel nélkül cserélés.

Random számok a mindennapi döntéshozatalban

Random számgenerátorok meglepően hasznosak a gyakorlati mindennapi döntésekben:

Törekedés eldöntése: Amikor két egyenlően jó opció létezik, a random szám döntést hozhat anélkül, hogy túl sokat gondolkodnánk. A kutatások szerint, ha a személyek túl sokat gondolkodnak az igazán egyenlő választásokon, akkor bevezetik a torzításokat, amelyek miatt kevésbé lesznek boldogok azzal a választással, ha véletlenszerűen választottak volna.

Tervezés és időbeosztás: A random számokkal történő időbeosztás biztosítja a türelmetlenséget az időben. Ki választhatja ki elsőnek a fantasy draftban, ki kapja a kedvenc műszakot, melyik témát tárgyalják először a megbeszélésen — a véletlenszerű hozzárendelés elkerüli a kedvezményezést és a türelmetlenség érzését.

Tanulás és gyakorlás: A diákok a flashkártyákkal használva a random sorrendben profitálnak — megakadályozza a tanulási "kontextuális jeleket" (ismeri a 15. kártya válaszát, mert a 14. kártya válaszát ismerte). A gyakorlás random összekeverése a bizonyított technikát (összekevert gyakorlás) erősíti a hosszú távú rögzítést, mint a blokkolt gyakorlás.

Kreatív inspiráció: A írók, művészek és zenészek a random szógenerátorokat, indító szövegeket és random korlátozó eszközöket használják a kreatív blokkok leküzdésére. A véletlenszerűen bevezetett korlátozások gyakran erőszakosan és érdekes kreatív megoldásokat eredményeznek.

Főbb kérdések

Ez a generátor valóban véletlenszerű?

Használja a böngésző crypto.getRandomValues() API-ját, amely egy kriptográfiai biztonságos pseudóramdombornyomó (CSPRNG). Játékokhoz, döntésekhez, statisztikákhoz és lottókhoz ez a véletlenség valóban indifferenciálhatatlan. Teljesen véletlenszerű véletlenséghez használjon hardveres RNG-eket vagy szolgáltatásokat, mint például random.org.

Lehet-e véletlenszámot generálni anélkül, hogy ismétlődne?

Igen — ez a mintavételezés nélküli cserélődés. A kalkulátor a Fisher-Yates keverési algoritmust használja: generálja az összes értéket a tartományban, keverje meg véletlenszerűen, és térjen vissza az első N értékre. Ez garantálja, hogy minden érték legfeljebb egyszer jelenik meg, és minden kombináció egyenlő valószínűséggel fordul elő.

Azonos számot két egymást követő húzáskor milyen valószínűséggel kapunk?

Leváltással (állapotnormális módban), egy N értékből álló tartományban a két egymást követő húzáskor kapott értékek azonosak valószínűsége 1/N. 1-100 tartományban: 1% azonos értéket kapni két egymást követő húzáskor. Sok húzással a megismétlődések elvárhatóak és normálisak. A "nem ismétlődő" módban a sorozatbeli duplikációk lehetetlenek a tervezés szerint.

Használhatom ezt a lottószámok kiválasztására?

Természetesen. Állítsa a tartományt a lottóhoz (pl. 1-49), és engedélyezze a "nem ismétlődő" beállítást a különálló számok kiválasztásához. Minden kombináció egyenlő valószínűséggel fordul elő — nincs olyan szám vagy kombináció, amely győzni fog vagy nem győzhet. A lottó maga véletlenszerű, tehát bármely kiválasztási módszer egyenlően érvényes.

Mi az a mag a véletlenszám-generálásban?

A mag a véletlenszám-generátor kezdőértéke. Ugyanaz a mag mindig ugyanazt a sorozatot eredményezi. Ez hasznos a reprodukálható szimulációkhoz — állítsa be a magot, futtassa a szimulációt, rögzítse a magot, és később ugyanazt a véletlenségi sorozatot reprodukálhatja a megerősítéshez vagy a hibakereséshez.

Hogyan válasszak véletlenszerűen egy listából?

Nevezze meg az elemeket 1-től N-ig, majd generáljon egy véletlenszerű egész számot 1 és N között. A megfelelő elem a véletlenszerű kiválasztás. Például, hogy véletlenszerűen válasszon 7 csapattagból, generáljon egy véletlenszerű egész számot 1 és 7 között. Minden személynek egyenlő 1/7 ≈ 14,3%-os esélye van a kiválasztásra.

A JavaScript Math.random() valóban véletlenszerű?

Nem. A Math.random() egy egyszerű PRNG, amelynek nincs biztonsági garanciája. Játékokhoz és nem érzékeny alkalmazásokhoz megfelelő, de soha ne használja kriptográfiai célokra (kulcsgenerálás, tokenek, jelszavak). Biztonsági alkalmazásokhoz mindig használja crypto.getRandomValues() vagy egy szerveroldali CSPRNG-t.

Mi a különbség a PRNG és a CSPRNG között?

Egy PRNG (Pseudorandom Number Generator) determinisztikus és gyors, de ha elég információt ismer a állapotáról, akkor előre jelezhető. A CSPRNG (Cryptographically Secure PRNG) hozzáadja a tulajdonságot, hogy a kimenetei számításilag nem különböznek a valódi véletlenségtől, még akkor is, ha egy támadó néhány kimenetet megfigyel. CSPRNG-k szükségesek jelszavakhoz, kulcsokhoz és tokenekhez.

Mi a Monte Carlo szimuláció?

A Monte Carlo szimuláció nagy számú véletlenszerű mintákat használ a komplex mennyiségek becslésére. Példa: becslése a π értékét azzal, hogy véletlenszerűen helyez el pontokat egy négyzetben lévő körbe — a pontok száma a körben a teljes pontok száma arányában konvergál a π/4-hez. A Monte Carlo módszereket használják a pénzügyben, a fizika, az építészet és a statisztika területén.

Lehet-e a véletlenszám-generátoroknak eltolódása?

A rossz minőségű RNG-k eltolódhatnak — bizonyos értékek gyakoribbak, mint mások, vagy a sorozatbeli értékek között korreláció van. A minőség mértéke a statisztikai tesztek (NIST Tesztelőkészlet, TestU01 BigCrush). A modern algoritmusok, mint például a Mersenne Twister, PCG és xoshiro, minden szabványos tesztet teljesítenek és praktikus célokra eltolódásmentesek.

Random számok a játékokban és a procedurális generálásban

A videójátékok a véletlenségen épülnek. A Minecraft világteremtésében a véletlen mezőgenerálás a szörnyek AI viselkedésének keverésétől a magas minőségű véletlenségig, amely újrajátszható, előre nem látható élményeket eredményez. A procedurális tartalomgenerálás (PCG) a matematikai korlátokkal kombinálja a véletlenszámokat, hogy minimális kézi erőfeszítéssel hatalmas tartalmat hozzon létre – a No Man's Sky 18 kvintillió bolygója mind procedurálisan lett generálva véletlenszámokból.

A roguelike játékok, mint a Nethack, a Spelunky és a Hades a procedurális szintgenerálás által határozzák meg a műfajt. Minden futás generál egy különböző labirintust, ellenség elhelyezkedést és tárgyelosztást. A játék ezt a véletlenszámot ülteti be, hogy a futások érzékenyek legyenek (a RNG nem dönt el véletlenszerűen, hogy azonnal meghal), miközben megmarad a véletlenszerűség. Sok roguelike megjeleníti a magokat, hogy a játékosok újrajátszhatják ugyanazt a futást vagy megoszthassák érdekes magokat másokkal.

A táblajátékok évszázadok óta használják a fizikai véletlenséget (dobok, keverés, forgók). A digitális megfelelőknek pontosan kell emulálni ezeket a szétosztásokat. Egy standard 6 oldalú dobot 1, 2, 3, 4, 5 és 6 közötti uniformis szétosztással használják. Egy kevert csomagból vett kártya véletlenszerű permutációt használ. Néhány játék használ dobópoharakat (több dobot dob, a legmagasabbat veszi) vagy előnyös/diszkvadránsz disztribúcióval ellátott dobot – ezekhez pontos statisztikai tervezésre van szükség a szándékolt valószínűségi disztribúció eléréséhez.

A Uniformis Véletlenszámokból Más Disztribúciók Generálása

A legtöbb RNG 0 és 1 közötti uniformis disztribúciót produkál (vagy egész számokat egy intervallumban). Gyakran szükség van olyan véletlenszámokra, amelyek más disztribúciókat követnek – normális, exponenciális, Poisson, stb. Ezeket a uniformis véletlenszámokból átalakítási módszerekkel lehet elérni.

A Box-Muller Transzformáció két uniformis véletlenszám U₁ és U₂-ből generál normális disztribúciós véletlenszámokat: Z₁ = √(−2ln(U₁)) × cos(2πU₂) és Z₂ = √(−2ln(U₁)) × sin(2πU₂). Mindkettő Z₁ és Z₂ a standard normális disztribúciót követi N(0,1). Skálázás Z × σ + μ-val kapjuk a N(μ,σ²) disztribúciót.

A Inverse Transform Method a kumulatív disztribúció függvényének (CDF) inverzét használja. Egy exponenciális disztribúcióval λ rátával: X = −ln(1−U)/λ, ahol U uniformis 0 és 1 között van. Ez közvetlenül átalakítja a uniformis véletlenszámot egy exponenciális disztribúcióvá. A módszer bármely disztribúcióval működik, amelynek analitikusan invertálható CDF-je van.

Statikus Tesztek a Véletlenséghez

Hogyan ellenőrizzük, hogy egy valóban véletlenszerű számgenerátor valóban véletlenszerű-e? A statisztikai tesztek ellenőrzik, hogy a számok sorozata olyan mintákat mutat-e, amelyek valószínűtlenek lennének egy igazán véletlenszerű sorozatban. A NIST Statisztikai Tesztsuite 15 tesztet tartalmaz, amelyek segítségével értékelhetők a véletlenszámgenerátorok a kriptográfiai alkalmazásokhoz. A kulcsfontosságú tesztek közé tartoznak:

Frekvencia Teszt (Monobit): Ellenőrzi, hogy a generált számok bináris reprezentációjában a 0- és 1-esek egyenlő gyakorisággal fordulnak-e elő. Egy 60%-osan fejelt pénzérmét használó, de egyenetlen eloszlású véletlenszámgenerátor ezt a tesztet nem teljesíti.

Menet Teszt: Ellenőrzi a folyamatosan azonos bitje (menet) számát. Ha a generátor túl sok hosszú menetet produkál ugyanazt a bitet, akkor nem véletlenszerű mintát mutat. Egy igazán véletlenszerű sorozatnak előrejelezhető eloszlása van a menetek hosszúságát illetően.

Soros Teszt: Ellenőrzi, hogy a párok, hármasok vagy négyestek előfordulnak-e egyenlő gyakorisággal. Ha a generátor a sorozatot 1,2,3,4,5,6,1,2,3,4,5,6... generálja, akkor a frekvencia tesztet teljesíti, de a soros tesztet nem – a párok nem véletlenszerűek.

Statisztikai TesztMit észlelNIST Tesztsuite?
Frekvencia (Monobit)0/1 gyakoriságának egyenlőtlenségeIgen
Menet TesztTúl sok/féligan kevés folyamatosan azonos értékIgen
AutokorrelációÉrtékek korrelációja a korábbi értékekkelIgen
Chi-SquareNem egyenletes eloszlásIgen (frekvencia teszt)
Ünnepi TávolságTúl-egyenes távolság a számok közöttVia TestU01
DiehardÖsszes minta tesztKülön tesztsuite

A TestU01 "BigCrush" tesztsuite a legnagyobb gyakorlati teszt – 106 tesztet tartalmaz, és elutasítja azokat az algoritmusokat, amelyek kisebb tesztsuiteket teljesítenek. A modern algoritmusok, például a PCG és a xoshiro a BigCrush tesztet teljesítik, míg az idősebb algoritmusok, például a lineáris kongruenciális generátor, amelyet az első C-könyvtárakban használtak, több tesztet is elbuknak és nem alkalmasak minőségi alkalmazásokhoz.

Az Ezt a Véletlenszámgenerátort Használva

Állítsa be a minimum és maximum értékeket a kívánt tartomány meghatározásához. Állítsa be a "hány" értéket, hogy több számot generáljon egyszerre. Engedélyezze a "nem ismétlődő" opciót, hogy egyedi számok listáját generálja (nélkül a kiválasztás nélküli mintavétel) – ideális a lottókhoz, a kártyák kihúzásához vagy a csoportokba való résztvevők kiosztásához anélkül, hogy ismétlődne. A generált sorozat a böngésző kriptográfiai véletlenszám API-ját használja a magas minőségű eredményekhez, amelyek bármely nem biztonsági célra alkalmasak. A lottóhoz használható számokat a szükséges kiválasztási számokkal egyenlő számban generálja, a röpláncoláshoz pedig soros számokat rendeljen hozzá a bejegyzésekhez és húzza ki a megfelelő számot. Az eredmények frissülnek minden alkalommal, amikor a gombot kattintja – a korábbi eredmények nem tárolódnak vagy nyomon követésre kerülnek.