Tilfeldig utvalg av tall. Tilfeldig tallgenerator online

Nummer følger oss overalt - hus- og leilighetsnummer, telefonnumre, bilnummer, passnummer, plastkort, datoer, passord E-post. Noen kombinasjoner av tall velger vi selv, men de fleste får vi tilfeldigvis. Uten å være klar over det bruker vi tilfeldig genererte tall hver dag. Hvis vi kommer med pin-koder, da unike koder kreditt- eller lønnskort genereres av pålitelige systemer som utelukker tilgang til passord. Generatorer tilfeldige tall gi beskyttelse på områder som krever rask informasjonsbehandling, sikkerhet og uavhengig behandling av data.

Prosessen med å generere pseudotilfeldige tall er underlagt visse lover og har blitt brukt i lang tid, for eksempel i lotterier. I den siste tiden ble tegninger utført ved bruk av lotterimaskiner eller lodd. Nå i mange land bestemmes vinnertallene til statlige lotterier nøyaktig av et sett med genererte tilfeldige tall.

Fordeler med metoden

Så en tilfeldig tallgenerator er en uavhengig moderne mekanisme for tilfeldig å bestemme kombinasjoner av tall. Det unike og perfeksjonen til denne metoden ligger i umuligheten av ekstern intervensjon i prosessen. Generatoren er et sett med programmer bygget for eksempel på støydioder. Enheten genererer en strøm av tilfeldig støy, hvis nåværende verdier konverteres til tall og formkombinasjoner.

Generering av tall gir umiddelbare resultater - det tar noen sekunder å lage en kombinasjon. Hvis vi snakker om lotterier, kan deltakerne umiddelbart finne ut om billettnummeret stemmer overens med den vinnende. Dette gjør at tegninger kan holdes så ofte deltakerne ønsker. Men hovedfordelen med metoden er dens uforutsigbarhet og umuligheten av å beregne algoritmen for å velge tall.

Hvordan pseudorandom-tall genereres

Tilfeldige tall er faktisk ikke tilfeldige - serien starter fra et gitt tall og genereres av en algoritme. En pseudorandom number generator (PRNG eller PRNG - pseudorandom number generator) er en algoritme som genererer en sekvens av tilsynelatende urelaterte tall, vanligvis underlagt en enhetlig fordeling. I informatikk brukes pseudorandomtall i mange applikasjoner: kryptografi, simuleringsmodellering, Monte Carlo-metoden osv. Kvaliteten på resultatet avhenger av egenskapene til PRNG.

Genereringskilden kan være fysisk støy fra kosmisk stråling til støy i en motstand, men slike enheter har applikasjoner nettverksikkerhet nesten aldri brukt. Kryptografiske applikasjoner bruker spesielle algoritmer som genererer sekvenser som ikke kan være statistisk tilfeldige. Imidlertid kan en riktig valgt algoritme produsere serier med tall som består de fleste tilfeldighetstester. Gjentakelsesperioden i slike sekvenser er større enn arbeidsintervallet tallene er hentet fra.

I mange moderne prosessorer inneholder PRNG, for eksempel i RdRand. Som et alternativ opprettes sett med tilfeldige tall og publiseres i en engangsblokk (ordbok). Kilden til tall i dette tilfellet er begrenset og gir ikke fullstendig nettverkssikkerhet.

Historien om PRNG

En prototype av en tilfeldig tallgenerator kan vurderes brettspill Senet, vanlig i det gamle Egypt i 3500 f.Kr. I henhold til forholdene deltok to spillere, trekkene ble bestemt ved å kaste fire flate svarte og hvite pinner - de var en slags PRNG fra den tiden. Pinnene ble kastet samtidig, og poeng ble talt: hvis en falt opp med den hvite siden, 1 poeng og et ekstra trekk, to hvite - to poeng, og så videre. Det maksimale resultatet på fem poeng ble mottatt av spilleren som kastet fire pinner med den svarte siden.

I dag har ERNIE-generatoren blitt brukt i mange år i Storbritannia til loddtrekninger. Det er to hovedmetoder for å generere vinnende tall: lineær kongruent og additiv kongruent. Disse og andre metoder er basert på prinsippet om tilfeldig utvalg og leveres av programvare som uendelig produserer tall, hvis rekkefølge er umulig å gjette.

PRNG opererer kontinuerlig, for eksempel i spilleautomater. I følge amerikansk lov, dette nødvendig tilstand, som alle programvareleverandører må overholde.

Ulike lotterier, tegninger etc. holdes ofte i mange grupper eller publikum i i sosiale nettverk, Instagram, etc., og brukes av kontoeiere for å tiltrekke nye publikummere til fellesskapet.

Resultatet av slike tegninger avhenger ofte av brukerens flaks, siden mottakeren av premien bestemmes tilfeldig.

For å gjøre denne bestemmelsen bruker lotteriarrangører nesten alltid en online eller forhåndsinstallert tilfeldig tallgenerator som distribueres gratis.

Valg

Ganske ofte kan det være vanskelig å velge en slik generator, siden funksjonaliteten deres er ganske annerledes - for noen er den betydelig begrenset, for andre er den ganske bred.

Nok blir implementert et stort nummer av slike tjenester, men vanskeligheten er at de er forskjellige i omfang.

Mange er for eksempel bundet av funksjonaliteten til et spesifikt sosialt nettverk (for eksempel fungerer mange generatorapplikasjoner på VKontakte bare med lenker fra dette sosiale nettverket).

Mest enkle generatorer de bestemmer ganske enkelt tilfeldig et tall innenfor et gitt område.

Dette er praktisk fordi det ikke knytter resultatet til et spesifikt innlegg, noe som betyr at det kan brukes til konkurranser utenfor det sosiale nettverket og i forskjellige andre situasjoner.

De har i hovedsak ingen annen bruk.

<Рис. 1 Генератор>

Råd! Når du velger den best egnede generatoren, er det viktig å vurdere hva den skal brukes til.

Spesifikasjoner

For den raskeste prosessen med å velge den optimale nettbaserte tjenesten for generering av tilfeldige tall, viser tabellen nedenfor de viktigste spesifikasjoner og funksjonaliteten til slike applikasjoner.

Tabell 1. Funksjoner ved drift nettbaserte applikasjoner for å generere et tilfeldig tall
Navn Sosialt nettverk Flere resultater Velg fra en liste over tall Online widget for nettstedet Velg fra et utvalg Deaktivere repetisjoner
RandStuff Ja Ja Nei Ja Nei
Kast lodd Offisiell nettside eller VKontakte Nei Nei Ja Ja Ja
Tilfeldig tall Offisiell side Nei Nei Nei Ja Ja
Randomus Offisiell side Ja Nei Nei Ja Nei
Tilfeldige tall Offisiell side Ja Nei Nei Nei Nei

Alle applikasjoner omtalt i tabellen er beskrevet mer detaljert nedenfor.

<Рис. 2 Случайные числа>

RandStuff

<Рис. 3 RandStuff>

Du kan bruke denne applikasjonen online ved å følge lenken til den offisielle nettsiden http://randstuff.ru/number/.

Dette er en enkel tilfeldig tallgenerator, preget av rask og stabil drift.

Det er vellykket implementert både i et eget format frittstående applikasjon på den offisielle nettsiden og som en applikasjon på det sosiale nettverket VKontakte.

Det særegne med denne tjenesten er at den kan velge et tilfeldig tall både fra et spesifisert område og fra en spesifikk liste over tall som kan spesifiseres på nettstedet.

Fordeler:

  • Stabil og raskt arbeid;
  • Mangel på direkte tilkobling til et sosialt nettverk;
  • Du kan velge ett eller flere tall;
  • Du kan kun velge blant de angitte tallene.

Minuser:

  • Manglende evne til å holde en tegning på VKontakte (dette krever egen søknad);
  • Programmer for VKontakte kjører ikke i alle nettlesere;
  • Resultatet virker noen ganger forutsigbart fordi bare én beregningsalgoritme brukes.

Brukeranmeldelser om denne søknaden er som følger: "Vi bestemmer gjennom denne tjenesten vinnerne i VKontakte-grupper. Takk," "Du er best," "Jeg bruker bare denne tjenesten."

Kast lodd

<Рис. 4 Cast Lots>

Denne applikasjonen er en enkel funksjonsgenerator, implementert på den offisielle nettsiden i form av en VKontakte-applikasjon.

Det er også en generator-widget for å sette inn på nettstedet ditt.

Hovedforskjellen fra den tidligere beskrevne applikasjonen er at dette lar deg deaktivere repetisjonen av resultatet.

Det vil si at når du gjennomfører flere generasjoner på rad i en økt, vil ikke antallet gjentas.

  • Tilgjengelighet av en widget for å sette inn på en nettside eller blogg;
  • Evne til å deaktivere resultatrepetisjon;
  • Tilstedeværelsen av funksjonen "enda mer tilfeldighet", etter aktivering endres valgalgoritmen.

Negativ:

  • Manglende evne til å bestemme flere resultater samtidig;
  • Manglende evne til å velge fra en spesifikk liste med tall;
  • For å velge en vinner i offentligheten, må du bruke en egen VKontakte-widget.

Brukeranmeldelser er som følger: "Det fungerer stabilt, det er ganske praktisk å bruke", "Praktisk funksjonalitet", "Jeg bruker bare denne tjenesten".

Tilfeldig tall

<Рис. 5 Случайное число>

Denne tjenesten er plassert på http://randomnumber.rf/.

Enkel generator med minimumsfunksjoner og tilleggsfunksjoner.

Kan tilfeldig generere tall innenfor et spesifisert område (maksimalt fra 1 til 99999).

Siden har ikke noe grafisk design, og derfor laster siden lett.

Resultatet kan kopieres eller lastes ned ved å trykke på en knapp.

Negativ:

  • Mangel på en widget for VKontakte;
  • Det er ingen mulighet for å holde trekninger;
  • Det er ingen måte å bygge inn resultatet på en blogg eller et nettsted.

Her er hva brukerne sier om denne tjenesten: "Ikke en dårlig generator, men ikke nok funksjoner", "Veldig få funksjoner", "Passer for raskt å generere tall uten unødvendige innstillinger."

Randomus

<Рис. 6 Рандомус>

Du kan bruke denne tilfeldige tallgeneratoren på http://randomus.ru/.

En annen, ganske enkel, men funksjonell tilfeldig tallgenerator.

Tjenesten har tilstrekkelig funksjonalitet for å bestemme tilfeldige tall, men den er ikke egnet for å gjennomføre konkurranser og andre mer komplekse prosesser.

Negativ:

  • Umulig å avholde trekninger basert på reposter av innlegg o.l.
  • Det er ingen applikasjon for VKontakte eller en widget for nettstedet;
  • Det er ikke mulig å deaktivere gjentatte resultater.

Vi har en tallrekke som består av praktisk talt uavhengige elementer som adlyder en gitt fordeling. Som regel jevn fordeling.

Du kan generere tilfeldige tall i Excel på forskjellige måter og måter. La oss vurdere bare de beste av dem.

Tilfeldig tallfunksjon i Excel

  1. RAND-funksjonen returnerer en jevnt fordelt tilfeldighet ekte nummer. Den vil være mindre enn 1, større enn eller lik 0.
  2. RANDBETWEEN-funksjonen returnerer et tilfeldig heltall.

La oss se på bruken deres med eksempler.

Sample tilfeldige tall ved hjelp av RAND

Denne funksjonen krever ingen argumenter (RAND()).

For å generere et tilfeldig reelt tall i området fra 1 til 5, for eksempel, bruk følgende formel: =RAND()*(5-1)+1.

Det returnerte tilfeldige tallet fordeles jevnt over intervallet.

Hver gang regnearket beregnes eller verdien i en celle i regnearket endres, returneres et nytt tilfeldig tall. Hvis du vil lagre den genererte populasjonen, kan du erstatte formelen med verdien.

  1. Klikk på cellen med et tilfeldig tall.
  2. Velg formelen i formellinjen.
  3. Trykk F9. OG INN.

La oss sjekke uniformiteten i fordelingen av tilfeldige tall fra den første prøven ved hjelp av et distribusjonshistogram.


Utvalget av vertikale verdier er frekvens. Horisontal - "lommer".



RANDBETWEEN-funksjonen

Syntaksen for RANDBETWEEN-funksjonen er (nedre grense; øvre grense). Det første argumentet må være mindre enn det andre. Ellers vil funksjonen gi en feil. Grensene antas å være heltall. Brøkdel formelen er forkastet.

Eksempel på bruk av funksjonen:

Tilfeldige tall med presisjon 0,1 og 0,01:

Hvordan lage en tilfeldig tallgenerator i Excel

La oss lage en tilfeldig tallgenerator som genererer en verdi fra et bestemt område. Vi bruker en formel som: =INDEKS(A1:A10,HELTTAL(RAND()*10)+1).

La oss lage en tilfeldig tallgenerator i området fra 0 til 100 i trinn på 10.

Fra listen tekstverdier du må velge 2 tilfeldige. Ved å bruke RAND-funksjonen sammenligner vi tekstverdier i området A1:A7 med tilfeldige tall.

La oss bruke INDEX-funksjonen til å velge to tilfeldige tekstverdier fra den opprinnelige listen.

For å velge én tilfeldig verdi fra listen, bruk følgende formel: =INDEKS(A1:A7,RANDBETWEEN(1,COUNT(A1:A7))).

Normalfordeling tilfeldig tallgenerator

Funksjonene RAND og RANDBETWEEN produserer tilfeldige tall med enkelt distribusjon. Enhver verdi med samme sannsynlighet kan falle inn i den nedre grensen for det forespurte området og inn i den øvre. Dette resulterer i en enorm spredning fra målverdien.

En normalfordeling innebærer at de fleste av de genererte tallene er nær måltallet. La oss justere RANDBETWEEN-formelen og lage en datamatrise med normal distribusjon.

Kostnaden for produkt X er 100 rubler. Hele partiet som produseres følger en normalfordeling. En tilfeldig variabel følger også en normal sannsynlighetsfordeling.

Under slike forhold er gjennomsnittsverdien av området 100 rubler. La oss generere en matrise og bygge en graf med normalfordeling med et standardavvik på 1,5 rubler.

Vi bruker funksjonen: =NORMINV(RAND();100;1,5).

Excel regnet ut hvilke verdier som var innenfor sannsynlighetsområdet. Siden sannsynligheten for å produsere et produkt med en kostnad på 100 rubler er maksimal, viser formelen verdier nær 100 oftere enn andre.

La oss gå videre til å plotte grafen. Først må du lage en tabell med kategorier. For å gjøre dette deler vi matrisen inn i perioder:

Basert på innhentede data vil vi kunne generere et diagram med normalfordeling. Verdiaksen er antall variabler i intervallet, kategoriaksen er perioder.

Innsendt av online generator tilfeldige tall fungerer basert på en pseudo-tilfeldig tallgenerator med en enhetlig fordeling innebygd i JavaScript. Heltall genereres. Som standard sendes 10 tilfeldige tall ut i området 100...999, tallene atskilt med mellomrom.

Grunnleggende innstillinger for tilfeldig tallgenerator:

  • Antall tall
  • Tallområde
  • Separator type
  • Slå på/av funksjonen for å fjerne repetisjoner (duplikater av tall)

Det totale antallet er formelt begrenset til 1000, med maksimalt 1 milliard. Separatoralternativer: mellomrom, komma, semikolon.

Nå vet du nøyaktig hvor og hvordan du får en gratis sekvens av tilfeldige tall i et gitt område på Internett.

Applikasjonsalternativer for en tilfeldig tallgenerator

En tilfeldig tallgenerator (RNG i JS med enhetlig distribusjon) vil være nyttig for SMM-spesialister og eiere av grupper og samfunn på de sosiale nettverkene Instagram, Facebook, VKontakte, Odnoklassniki for å avgjøre vinnerne av lotterier, konkurranser og premietrekninger.

En tilfeldig tallgenerator lar deg trekke premier blant et vilkårlig antall deltakere med et spesifisert antall vinnere. Konkurranser kan avholdes uten reposter og kommentarer - du setter selv antall deltakere og intervall for generering av tilfeldige tall. Du kan få et sett med tilfeldige tall online og gratis på denne siden, og du trenger ikke å installere noen applikasjoner på smarttelefonen eller programmet på datamaskinen.

Dessuten kan en online tilfeldig tallgenerator brukes til å simulere å kaste en mynt eller terning. Vi har imidlertid egne spesialiserte tjenester for disse sakene.

  • Opplæringen

Har du noen gang lurt på hvordan Math.random() fungerer? Hva er et tilfeldig tall og hvordan oppnås det? Se for deg et intervjuspørsmål – skriv tilfeldig tallgenerator i et par linjer med kode. Så, hva er det, en ulykke og er det mulig å forutsi det?

Jeg er veldig fascinert av ulike IT-gåter og oppgaver, og tilfeldig tallgenerator er en av disse oppgavene. Vanligvis i telegramkanalen min ordner jeg alle mulige gåter og ulike oppgaver fra intervjuer. Problemet med tilfeldig tallgenerator har vunnet stor popularitet og jeg ønsket å forevige det i dypet av en av de autoritative informasjonskildene – altså her på Habré.

Dette materialet vil være nyttig for alle front-end- og Node.js-utviklere som er på forkant med teknologi og ønsker å komme inn i et blokkjedeprosjekt/oppstart der spørsmål om sikkerhet og kryptografi er minst grunnleggende nivå, spør de til og med frontend-utviklere.

Pseudo-tilfeldig tallgenerator og tilfeldig tallgenerator

For å få noe tilfeldig, trenger vi en kilde til entropi, en kilde til noe kaos som vi vil bruke til å generere tilfeldighet.

Denne kilden brukes til å akkumulere entropi og deretter få en startverdi (frø) fra den, som er nødvendig for at tilfeldige tallgeneratorer (RNG) skal generere tilfeldige tall.

Pseudo-tilfeldig tallgenerator bruker en enkelt startverdi, derav dens pseudo-tilfeldighet, mens tilfeldig tallgenerator alltid genererer et tilfeldig tall, som i begynnelsen har en høy kvalitet tilfeldig variabel, som er hentet fra ulike kilder til entropi.

Entropi er et mål på uorden. Informasjonsentropi er et mål på informasjonens usikkerhet eller uforutsigbarhet.
Det viser seg at for å lage en pseudo-tilfeldig sekvens trenger vi en algoritme som vil generere en bestemt sekvens basert på en bestemt formel. Men en slik sekvens kan forutses. La oss imidlertid forestille oss hvordan vi kunne skrive vår egen tilfeldige tallgenerator hvis vi ikke hadde Math.random()

PRNG har en eller annen algoritme som kan reproduseres.
RNG er prosessen med å få tall utelukkende fra en slags støy, evnen til å beregne som har en tendens til null. Samtidig har RNG visse algoritmer for å utjevne fordelingen.

Vi kommer opp med vår egen PRNG-algoritme

Pseudorandom number generator (PRNG) er en algoritme som genererer en sekvens av tall hvis elementer er nesten uavhengige av hverandre og adlyder en gitt fordeling (vanligvis uniform).
Vi kan ta en sekvens av noen tall og ta modulen til tallet fra dem. Det enkleste eksempelet som dukker opp. Vi må tenke på hvilken sekvens vi skal ta og modulen fra hva. Hvis du bare direkte fra 0 til N og modul 2, får du en generator på 1 og 0:

Funksjon* rand() ( const n = 100; const mod = 2; la i = 0; mens (true) ( ​​gir i % mod; if (i++ > n) i = 0; ) ) la i = 0; for (la x av rand()) ( if (i++ > 100) bryte; console.log(x); )
Denne funksjonen genererer sekvensen 01010101010101... og den kan ikke engang kalles pseudo-tilfeldig. For at en generator skal være tilfeldig, må den bestå neste bittest. Men vi har ikke en slik oppgave. Likevel, selv uten noen tester kan vi forutsi neste sekvens, noe som betyr at en slik algoritme ikke er egnet, men vi er i riktig retning.

Hva om vi tar en velkjent, men ikke-lineær sekvens, for eksempel tallet PI. Og som verdien for modulen tar vi ikke 2, men noe annet. Du kan til og med tenke på endringsverdien til modulen. Sekvensen av sifre i Pi anses som tilfeldig. Generatoren kan operere med Pi-tall fra et ukjent punkt. Et eksempel på en slik algoritme, med en PI-basert sekvens og en variabel modul:

Const vektor = [...Math.PI.toFixed(48).replace(".","")]; function* rand() ( for (la i=3; i<1000; i++) { if (i >99) i = 2; for (la n=0; n Men i JS kan PI-nummeret bare vises med opptil 48 sifre og ikke mer. Derfor er det fortsatt enkelt å forutsi en slik sekvens, og hver kjøring av en slik generator vil alltid produsere de samme tallene. Men generatoren vår har allerede begynt å vise tall fra 0 til 9.

Vi har en generator av tall fra 0 til 9, men fordelingen er veldig ujevn og den vil generere den samme sekvensen hver gang.

Vi kan ikke ta tallet Pi, men tid i numerisk representasjon og betrakte dette tallet som en sekvens av tall, og for å sikre at sekvensen ikke gjentar seg hver gang, vil vi lese den fra slutten. Totalt sett vil vår algoritme for vår PRNG se slik ut:

Funksjon* rand() ( la newNumVector = () => [...(+new Date)+""].reverse(); la vektor = newNumVector(); la i=2; while (true) (​ hvis (i++ > 99) i = 2; la n=-1;< vector.length) yield (vector[n] % i); vector = newNumVector(); } } // TEST: let i = 0; for (let x of rand()) { if (i++ >100) pause; console.log(x)
Dette ser allerede ut som en pseudo-tilfeldig tallgenerator. Og den samme Math.random() er en PRNG, vi snakker om det litt senere. Dessuten er hver gang vi får det første tallet annerledes.

Faktisk på disse enkle eksempler du kan forstå hvordan mer fungerer komplekse generatorer tilfeldige tall. Og det er til og med ferdige algoritmer. Som et eksempel, la oss se på en av dem - Linear Congruent PRNG (LCPRNG).

Lineær kongruent PRNG

Lineær kongruent PRNG (LCPRNG) er en vanlig metode for å generere pseudorandomtall. Den er ikke kryptografisk sterk. Denne metoden består i å beregne leddene til en lineær tilbakevendende sekvens modulo et naturlig tall m, gitt av formelen. Den resulterende sekvensen avhenger av valget av startnummer — dvs. frø. På forskjellige betydninger frø produserer forskjellige sekvenser av tilfeldige tall. Et eksempel på implementering av en slik algoritme i JavaScript:

Const a = 45; const c = 21; konst m = 67; var frø = 2; const rand = () => frø = (a * frø + c) % m; for(la i=0; i<30; i++) console.log(rand())
Mange programmeringsspråk bruker LCPRNG (men ikke akkurat denne algoritmen(!)).

Som nevnt ovenfor kan en slik sekvens forutses. Så hvorfor trenger vi PRNG? Hvis vi snakker om sikkerhet, så er PRNG et problem. Hvis vi snakker om andre oppgaver, kan disse egenskapene være et pluss. For eksempel, for ulike spesialeffekter og grafikkanimasjoner, må du kanskje ofte ringe tilfeldig. Og det er her betydningsfordeling og ytelse er viktig! Sikre algoritmer kan ikke skryte av hastighet.

En annen egenskap er reproduserbarhet. Noen implementeringer lar deg spesifisere et frø, og dette er veldig nyttig hvis sekvensen må gjentas. Reproduksjon er nødvendig i tester, for eksempel. Og det er mange andre ting som ikke krever en sikker RNG.

Hvordan Math.random() fungerer

Math.random()-metoden returnerer et pseudo-tilfeldig flyttall fra området = crypto.getRandomValues(new Uint8Array(1)); console.log(rvalue)
Men i motsetning til Math.random() PRNG, er denne metoden svært ressurskrevende. Faktum er at denne generatoren bruker systemanrop i operativsystemet for å få tilgang til entropikilder (mac-adresse, CPU, temperatur osv...).