Generador de Números Aleatorios
Genera uno o varios números aleatorios en cualquier rango, con o sin repetición — usando aleatoriedad criptográfica.
1.455 visitas
Cómo se Generan Realmente los Números
No toda "aleatoriedad" es igual. Math.random(), disponible en todos los navegadores, es un generador pseudoaleatorio rápido — determinista por dentro y, en principio, predecible si alguien conoce su estado interno, lo que lo hace inadecuado para cualquier cosa sensible a la seguridad, como sorteos con premios reales en juego. Esta herramienta usa en su lugar crypto.getRandomValues(), el generador aleatorio criptográficamente seguro incorporado en el navegador, que obtiene sus valores de las fuentes de entropía del sistema operativo y no es predecible ni siquiera en principio.
Sin embargo, tener una fuente aleatoria segura solo resuelve la mitad del problema. Mapear un valor aleatorio a un rango específico (digamos, 1-100) de forma ingenua — tomando aleatorio % 100 — introduce un sesgo de módulo sutil pero real: como el rango de salida bruto del generador normalmente no es un múltiplo exacto de 100, algunos restos terminan siendo ligeramente más probables que otros. El sesgo es pequeño, pero es real y se acumula a lo largo de muchos sorteos — exactamente el tipo de cosa que no debería existir en una rifa supuestamente justa.
La solución es el muestreo por rechazo: en lugar de forzar cada valor bruto dentro del rango mediante módulo, los valores brutos fuera de rango se descartan y se extrae uno nuevo hasta que encaje limpiamente en un múltiplo exacto del rango objetivo. Esto garantiza una distribución verdaderamente uniforme — cada número del rango tiene exactamente la misma probabilidad — a costa de necesitar ocasionalmente uno o dos sorteos adicionales, algo imperceptible a las velocidades involucradas.
Elige un mínimo, un máximo y cuántos números se necesitan; marca único para evitar repeticiones, que es lo que necesitan las rifas, sorteos de premios, muestreos y juegos cuando la misma entrada no debe ganar dos veces. Todo se ejecuta en el dispositivo local — ningún número se transmite ni se almacena en ningún sitio, y actualizar la página produce un sorteo completamente nuevo.
Datos Que Vale la Pena Conocer
- El sesgo de módulo es invisible en un puñado de sorteos, pero se vuelve estadísticamente detectable a lo largo de miles — el muestreo por rechazo lo elimina por completo en lugar de solo reducirlo.
- Que crypto.getRandomValues() sea "criptográficamente seguro" significa que su salida no se puede predecir ni siquiera por alguien que haya visto salidas anteriores — una propiedad que Math.random() explícitamente no tiene y nunca fue diseñado para tener.
- El rango es inclusivo en ambos extremos: un sorteo de 1 a 10 puede producir tanto 1 como 10, no solo los valores estrictamente entre ellos.
- Para una rifa auditable, numera a los participantes del 1 al N, ajusta el rango en consecuencia, activa único, y haz una captura de pantalla del resultado, ya que no se almacena nada en el servidor después del sorteo.
Preguntas Frecuentes
¿Los números son realmente aleatorios, o solo "suficientemente aleatorios"?
Provienen de crypto.getRandomValues(), que se basa en la fuente de entropía criptográfica del sistema operativo — impredecibles en principio, no solo en la práctica, a diferencia del simple Math.random() que usan la mayoría de los scripts casuales de números aleatorios.
¿Qué es el sesgo de módulo y lo tiene esta herramienta?
Mapear ingenuamente un valor aleatorio a un rango con aleatorio % N favorece ligeramente a algunos números sobre otros, porque el rango bruto del generador normalmente no es un múltiplo exacto de N. Esta herramienta lo evita con muestreo por rechazo: los valores brutos fuera de rango se descartan y se vuelven a extraer hasta que se garantiza un resultado uniforme.
¿Qué es el muestreo por rechazo, en términos sencillos?
En lugar de forzar cada valor aleatorio dentro de un rango con una operación de módulo, los valores que introducirían sesgo simplemente se descartan y se extrae uno nuevo — repitiendo esto hasta que aparece un valor que encaja perfecta y uniformemente en el rango. El costo es un sorteo adicional ocasional; el beneficio es un resultado verdaderamente uniforme.
¿Puedo usar esto para un sorteo de premios?
Sí. Numera a los participantes del 1 al N, ajusta el rango en consecuencia, activa único y genera tantos ganadores como necesites. Haz una captura de pantalla para tus registros, ya que los resultados no se almacenan en ningún sitio después del sorteo.
¿Se incluyen tanto el mínimo como el máximo en el rango?
Sí — el rango es inclusivo en ambos extremos. Un sorteo de 1 a 10 puede producir tanto 1 como 10, exactamente como ocurriría si se sacaran papeletas numeradas de un sombrero.
Herramientas Similares
Reportar un Problema
Generador de Números Aleatorios
Comentarios
Aún no hay comentarios — ¡sé el primero en escribir uno!