
Psevdo-naključne številke so bistvene za številne računalniške aplikacije, kot so igre in varnost. V igrah naključne številke zagotavljajo nepredvidljive elemente, na katere se lahko igralec odzove, kot je izogibanje naključnemu metu ali risanje kartice z vrha krova.
V računalniški varnosti je psevdo-naključnost pomembna pri algoritmih šifriranja, ki ustvarjajo kode, ki jih ni mogoče predvideti ali uganiti.
Kaj je PRNG?
Generator psevdo-naključnih števil ali PRNG je katerikoli program ali funkcija, ki uporablja matematiko za simulacijo naključnosti. Lahko se imenuje tudi DRNG (digitalni generator naključnih števil) ali DRBG (deterministični generator naključnih bitov).
Včasih je lahko matematika zapletena, vendar na splošno uporaba PRNG zahteva le dva koraka:
- Navedite PRNG s poljubnim semenom.
- Vprašajte za naslednjo naključno številko.
Vrednost semen je "izhodišče" za ustvarjanje naključnih števil. Vrednost se uporablja pri izračunavanju števil. Če se semenska vrednost spremeni, se spremenijo tudi ustvarjene številke in posamezna semenska vrednost vedno ustvari enake številke. Zaradi tega številke niso resnično naključne, ker prave naključnosti nikoli ni bilo mogoče ponovno ustvariti.
Trenutni čas se pogosto uporablja kot edinstvena semenska vrednost. Na primer, če je 5. marec 2018, ob 5:03 uri in 7, 01324 sekunde UTC, se lahko izrazi kot celo število. Ta natančen čas se ne bo nikoli več ponovil, zato mora PRNG s tem semenom ustvariti edinstven naključni niz.
Opomba: Možnost reproduciranja naključno generiranega zaporedja je lahko koristna. V akademskih aplikacijah lahko generiramo množično zaporedje naključnih vrednosti za simulacijo, nato pa natančno ponovimo za podrobnejšo analizo pozneje. Drug primer, v računalniških igrah, če igralec naloži shranjeno igro, so lahko vsi "naključni" dogodki enaki, kot če se igra nikoli ne ustavi. Na ta način igralec ne more ponovno naložiti iste igre večkrat, da bi poskusil za boljšo srečo.
Kako ustvariti psevdo-naključno število
Spodaj je nekaj načinov, kako lahko ustvarite psevdo-naključno število v skupnih programih in programskih jezikih.
Ukazni poziv za Windows
V ukazni vrstici Windows ali v paketni datoteki posebna spremenljivka okolja % RANDOM% ustvari psevdo-naključno število med 0 in 32767, ki je posneto s časom, ki ga je zagnal ukazni poziv.
echo "Torej% RANDOM%!"
"Torej 27525!"
Če želite ustvariti paketno datoteko, ki generira naključno število med 1 in 100:
copy con sorandom.bat echo off set / myrand =% RANDOM% * 100/32768 + 1 echo Številka, na katero sem mislil, je bil% myrand%. Si ga dobil prav?
Za shranjevanje paketne datoteke pritisnite Ctrl + Z in Enter . Nato izvedite datoteko:
tako naključno
Številka, na katero sem mislil, je bila 91. Si dobil prav?
Windows PowerShell
Cmdlet Get-Random generira naključno število med 0 in 2.147.483.647 (največja vrednost nepodpisanega 32-bitnega celega števila).
Get-Random
1333190525
Ukaza »cmdlet« ima več možnosti, kot sta najmanjša in največja vrednost. Vrednosti so zaokrožene navzdol, tako da za ustvarjanje števila med 1 in 100 nastavite maksimum na 101:
Get-Random -Minimum 1 -Maximum 101
99
Microsoft Excel
V Excelovi preglednici bo formula = RAND () ustvarila naključno število med 0 in 1. Na primer, če označite celico in vnesete = RAND (), bo celica vsebovala številko, ki se bo spremenila, ko bo list ponovno izračunano.

Ta metoda deluje tudi v drugih aplikacijah za preglednice, vključno z LibreOffice Calc in Google Sheets.
V programskih jezikih
Večina programskih jezikov ima svoje PRNG funkcije. Nekaj pogostih primerov:
C
V programskem jeziku C so funkcije PRNG definirane v standardni knjižnici, stdlib . Običajen način sejanja naključnega generatorja je funkcija time (), deklarirana v času.h. Ustvarjeno število pade med 0 in konstanto RAND_MAX, ki je sistemsko specifično celo število, ki je vsaj 32767.
#include #include #include void main () {srand (time (NULL)); / * seme generator * / int rand1 = rand (); / * psevdaramično celo število med 0 in RAND_MAX * / printf ("Naključno število med 0 in% d:% d \ _", RAND_MAX, (int) rand1); / * Ali v določenem območju: * / int min = 0; int max = 100; float rand2 = (float) rand () * max / RAND_MAX + 1; int round = (int) rand2; printf ("Naključno število med% d in% d:% d (% f)", min, max, round, rand2); vrnitev; }
Izhod:
Naključno število med 0 in 2147483647: 1789080047 Naključno število med 0 in 100: 74 (74.369179)
C ++
V C ++:
#include #include #include int main () {srand (time (NULL)); std :: cout << "Naključno število med 0 in" << RAND_MAX << ":" << rand () << "" "" Naključno število med 1 in 100: "<< (rand ()% 100) + 1 << std :: endl; return 0; }
Izhod:
Naključno število med 0 in 2147483647: 126569208 Naključno število med 1 in 100: 9
Python 3
Naključni modul v Pythonu ponuja različne funkcije za generiranje naključnih števil. V tem primeru uporabljamo tri različne metode za iskanje naključnega celega števila v območju.
import naključno iz datetime uvoženo datetime časovno random.seed (datetime.now ()) print ("Naključno število v območju [0, 1):", random.random ()) # V območju. Vsi ti delajo isto stvar: print ("Naključno število med 1 in 100:", okroglo (random.random () * 100) + 1) print ("Naključno število med 1 in 100:", random.randrange (1, 101)) print ("Naključno število med 1 in 100:", random.randint (1, 100))
Izhod:
Naključno število v območju [0, 1): 0.05137418896158319 Naključno število med 1 in 100: 27 Naključno število med 1 in 100: 80 Naključno število med 1 in 100: 80
Perl 5
V Perl:
srand (čas); # spremembe enkrat na sekundo natisni "Naključno število v območju [0, 1):", rand (), "\ t "Naključno število v območju [1, 100]:", int (rand (101)), "\ t
Izhod:
Naključno število v območju [0, 1): 0, 691379946963028 Naključno število v območju [0, 100]: 82
JavaScript
console.log ("Naključno število v območju [0, 1):" + Math.random ()); console.log ("Naključno število v območju [1100]:" + Math.floor (Math.random () * 101));
Oglejte si rezultate v konzoli JavaScript v vašem brskalniku (na primer v Firefoxu pritisnite Ctrl + Shift + K ):
Naključno število v območju [0, 1): 0, 305008216755414 Naključno število v območju [1, 100]: 8
Opomba: Funkcija Math.random () v JavaScriptu ni mogoče sejati . Če potrebujete robusten PRNG v JavaScriptu, preverite boljše naključne številke za JavaScript na GitHubu.
Primer PRNG: gradnik JavaScript
Z uporabo spodnjega gradnika lahko zaprete PRNG in ga uporabite za ustvarjanje naključnih števil.
Vsakič, ko ustvarite naključno število iz vašega podanega semena, se njegov odmik poveča za 1. Prvo število, ki ga generira seme, odstopa od nič, drugo ima odmik 1, itd. .
V polje vnesite vse, kar želite, da ustvarite edinstveno seme.
Z gumbom Generiraj dobite naslednje naključno število z uporabo tega semena in povečajte odmik.
Z gumbom za ponastavitev ponastavite zamik na nič.
iz semen :
Ponastavi odmik semena (trenutno 0 )
Ta pripomoček uporablja odprtokodne skripte PRNG Johannes Baagøe, Alea.js in Mash.js.
Računalniška varnost, Programiranje, pogoji programske opreme