¿Qué es un generador de números aleatorios?
Un generador de números aleatorios (RNG) produce números sin patrón predecible. Existen dos tipos principales:
- RNG verdadero (TRNG): Utiliza entropía física — ruido térmico, desintegración radiactiva, eventos atmosféricos. Se encuentra en módulos de seguridad hardware y algunas APIs del sistema operativo.
- RNG pseudoaleatorio (PRNG): Usa un algoritmo determinista con una semilla inicial. Los resultados parecen aleatorios pero son reproducibles si se conoce la semilla. Es el tipo usado en navegadores, juegos y simulaciones.
Para uso cotidiano — sorteos, juegos, elegir un ganador, simulaciones estadísticas — un PRNG de calidad como Math.random() del navegador es más que suficiente. Supera todos los tests estándar de aleatoriedad, incluidos Diehard y TestU01.
Cómo realizar un sorteo justo — paso a paso
- Asigna un número a cada participante. Si tienes 50 personas, el rango es 1–50.
- Abre el Generador de Números Aleatorios. Selecciona el modo Sorteo.
- Ajusta Mín a 1 y Máx a 50 (o el número de participantes que tengas).
- Establece "Cantidad" al número de ganadores que necesitas — por ejemplo, 3 para primer, segundo y tercer premio.
- Activa "Sin repetidos". Garantiza que cada participante solo puede ganar una vez.
- Pulsa Realizar Sorteo. Cada bola se anima de forma independiente y cae en un número único.
- Copia y registra los resultados. El panel de historial conserva los últimos 8 sorteos como referencia.
El algoritmo Fisher-Yates — cómo funcionan los sorteos sin repetidos
El algoritmo Fisher-Yates (también llamado Knuth shuffle) es el estándar para generar permutaciones uniformemente aleatorias:
- Crea un array con todos los números del rango:
[1, 2, 3, …, N] - Para cada posición desde la última hasta la primera, intercámbiala con una posición anterior elegida aleatoriamente.
- Toma los primeros K elementos del array barajado como resultados del sorteo.
Todas las permutaciones son igualmente probables, lo que hace al algoritmo matemáticamente equivalente a extraer números de una urna física — sin sesgos ni repeticiones.
Generar números aleatorios en código
JavaScript
// Entero aleatorio entre min y max (inclusive)
function randInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
randInt(1, 100); // p. ej. 42
// Criptográficamente seguro (para contraseñas/tokens)
const array = new Uint32Array(1);
crypto.getRandomValues(array);
const seguro = array[0] % 100 + 1; // 1–100
Python
import random
# Entero aleatorio único
random.randint(1, 100) # p. ej. 73
# Sorteo: 5 números únicos de 1–50
ganadores = random.sample(range(1, 51), 5)
# Criptográficamente seguro
import secrets
secrets.randbelow(100) + 1 # 1–100
Excel / Google Sheets
=ALEATORIO.ENTRE(1; 100) ' Entero aleatorio 1–100
' Nota: ALEATORIO.ENTRE se recalcula con cada cambio.
' Pega como valores (Ctrl+Mayús+V) para fijar el resultado.
PHP
<?php
// Estándar (Mersenne Twister)
$n = rand(1, 100);
// Criptográficamente seguro
$n = random_int(1, 100);
?>
Ruby
# Entero aleatorio 1–100
rand(1..100)
# Seguro criptográficamente
require 'securerandom'
SecureRandom.random_number(100) + 1
Consejos para sorteos justos y transparentes
- Graba el sorteo en directo. Comparte pantalla o transmite en streaming para generar confianza.
- Usa un rango fijo. Anuncia la lista de participantes y sus números asignados antes del sorteo.
- Activa "sin repetidos" siempre que necesites ganadores únicos.
- Haz captura de pantalla del resultado y del historial inmediatamente después del sorteo.
- Evita repetir el sorteo. Acepta el primer resultado salvo que haya un motivo técnico documentado.
Preguntas frecuentes
¿Es Math.random() suficiente para un sorteo?
Sí. Los PRNGs de los navegadores usan algoritmos como xorshift128+ que producen miles de millones de valores distintos sin sesgo detectable. Para sorteos con cientos o miles de participantes, la probabilidad de cualquier resultado injusto es despreciable.
¿Cuál es la diferencia entre Math.random() y crypto.getRandomValues()?
Math.random() es rápido y válido para juegos, sorteos y simulaciones. crypto.getRandomValues() usa la entropía del sistema operativo y es criptográficamente seguro — necesario para contraseñas y tokens, pero innecesario para elegir números aleatorios en un sorteo.
¿Cómo genero un número aleatorio entre 1 y 100?
Online: abre nuestra herramienta, ajusta Mín a 1 y Máx a 100, pulsa Generar. En código: Math.floor(Math.random() * 100) + 1 en JavaScript, o random.randint(1, 100) en Python.
¿Puede salir el mismo número dos veces en modo sorteo?
No cuando "sin repetidos" está activado. Con la opción desactivada sí pueden repetirse — útil para simular tiradas de dados o muestreo con reemplazo.
Conclusión
Un buen generador de números aleatorios cubre desde elegir el destino de las vacaciones hasta organizar un sorteo completamente auditable. Para uso cotidiano, los PRNGs del navegador son estadísticamente justos y más que suficientes. Cuando necesitas garantías criptográficas, recurre a crypto.getRandomValues() o al módulo secrets de Python.
Herramientas relacionadas
- Generador de UUID — genera identificadores únicos criptográficamente seguros
- Generador de Contraseñas — crea contraseñas seguras y aleatorias
- Calculadora de Porcentaje — calcula probabilidades y porcentajes