
Generátor náhodného čísla
Jak vygenerovat náhodné číslo z určitého rozsahu (v JavaScriptu, PHP atd.)
Generátor kódu pro náhodná čísla
Následující generátor po zadání nejnižšího a nejvyššího čísla připraví JS/PHP kód, který slouží k vygenerování náhodného čísla z daného rozsahu.
Náhodné číslo v JavaScriptu
V JS se pro generování náhodného čísla používá Math.random()
.
const nahodne = Math.random();
V proměnné nahodne
bude něco mezi 0 a 1, například 0.6577748781199532
. Vyjít může i přesná nula, ale vždy bude číslo menší než 1.
Protože je zpravidla nutné mít čísla celá, násobí se to celé počtem požadovaných čísel. Tj. pro vygenerování deseti čísel:
nahodne = nahodne * 10;
Obsah nahodne
teď bude něco jako 6.577748781199532
. Pro dosažení celých čísel se potom provede zaokrouhlení.
nahodne = Math.floor(nahodne);
A výsledkem je 6
. Metoda Math.floor
zaokrouhluje dolů, takže výsledek bude nabývat hodnot 0 až 9. Použití jiného způsobu zaokrouhlení (Math.round
/Math.ceil
) by vedlo k nerovnoměrnému rozdělení jednotlivých čísel.
Následný obrázek srovnává četnosti jednotlivých čísel při různých způsobech zaokrouhlení.
Je-li cílem dostat místo 0–9 číslo z rozsahu 1 až 10, stačí přičíst jedničku.
nahodne = nahodne + 1;
Potřebujete-li bezpečnou náhodnost (např. pro identifikátory nebo tokeny), použijte crypto.getRandomValues
.
function secureRandomInt(min, max) {
const range = max - min + 1;
const buf = new Uint32Array(1);
crypto.getRandomValues(buf);
return min + (buf[0] % range);
}
Jakou náhodnost zvolit v JavaScriptu
Pro běžné UI a logiku použijte Math.random()
.
const n = Math.floor(Math.random() * 10) + 1;
Pro bezpečnost, tokeny a identifikátory použijte Web Crypto.
crypto.randomUUID();
const bytes = new Uint8Array(32);
crypto.getRandomValues(bytes);
Pro reprodukovatelné výsledky použijte seedovatelný PRNG.
TypeScript funkce
Užitečné typované funkce pro běžnou práci s náhodností v TypeScriptu.
Celé číslo v rozsahu:
export function randomInt(min: number, max: number): number {
const a = Math.ceil(min);
const b = Math.floor(max);
return Math.floor(Math.random() * (b - a + 1)) + a;
}
Náhodná položka z pole:
export function randomItem(items: readonly T[]): T {
if (items.length === 0) throw new Error('items must not be empty');
const index = Math.floor(Math.random() * items.length);
return items[index];
}
Bezpečné celé číslo pomocí Web Crypto:
export function secureRandomInt(min: number, max: number): number {
const a = Math.ceil(min);
const b = Math.floor(max);
const range = b - a + 1;
const buf = new Uint32Array(1);
crypto.getRandomValues(buf);
return a + (buf[0] % range);
}
Náhodné číslo PHP
V PHP je pro náhodné celé číslo z daného rozsahu doporučené použít random_int
(od PHP 7). Funkci se zadává rozsah čísel, ze kterých se má výsledek vygenerovat.
Obě čísla parametrů znamenají včetně, takže následující kód vygeneruje čísla 1–10.
random_int(1, 10);
Pro kryptograficky bezpečná data (např. tokeny) použijte random_bytes
a případně je převeďte do čitelného formátu.
Náhodné číslo v dalších jazycích
Nejčastější způsob, jak získat náhodné celé číslo v rozsahu min..max
v populárních jazycích.
Python:
import random
random.randint(1, 10) # včetně obou krajů
Go:
import (
"crypto/rand"
"math/big"
)
// 1..10 včetně
nBig, _ := rand.Int(rand.Reader, big.NewInt(10))
n := int(nBig.Int64()) + 1
Ruby:
rand(1..10) # včetně 1 i 10
Rust:
use rand::Rng;
let n = rand::thread_rng().gen_range(1..=10);
Java (Java 17+):
import java.util.concurrent.ThreadLocalRandom;
int n = ThreadLocalRandom.current().nextInt(1, 11); // 1..10
C# (.NET 6+):
var n = Random.Shared.Next(1, 11); // 1..10
Stále stejné náhodné číslo
Zvlášť při malém počtu čísel a malém počtu opakování se může stát, že bude nějaké číslo padat podezřele často.

Pokud prvek náhody nemusí být matematicky přesný, ale jde hlavně o dojem uživatele, dá se tomu trochu pomoci. Například zabránit vygenerování téhož čísla dvakrát po sobě.
Ukázka – nikdy se nevygeneruje stejné číslo dvakrát za sebou
Pokud je navíc cílem zobrazit všechny náhodné položky, hodí se ještě požadovat, aby se nějaké číslo mohlo vygenerovat podruhé až v okamžiku, kdy každé číslo z rozsahu už alespoň jednou padlo.
V případě PHP je nutné vygenerovaná náhodná čísla někam ukládat – například do pole $_SESSION
.
Využití
Na základě vygenerování náhodného čísla se dá potom i vypisovat náhodný obsah.
Související články



JavaScript null
a undefined
Rozdíly mezi null
a undefined
v JavaScriptu, kdy je používat a jak se vyhnout běžným chybám.

Sleep v JavaScriptu
Jak implementovat sleep/delay funkcionalitu v JavaScriptu pomocí Promise
a async
/await