TextToolbox Herramientas de texto instantáneas

Generador de Números Aleatorios

Define un rango y una cantidad — cada número se genera con una fuente aleatoria criptográficamente segura y sin sesgo, todo en tu navegador.

Aleatoriedad sin sesgo, no solo "bastante aleatoria"

Este generador usa crypto.getRandomValues(), una fuente aleatoria criptográficamente segura — no Math.random(), que es rápida pero está pensada para animaciones y juegos, no para algo donde la imparcialidad del resultado realmente importa. Conseguir una fuente segura es solo la mitad del trabajo: convertir un valor aleatorio de 32 bits en un número dentro de tu rango elegido sin introducir sesgo requiere un paso más, llamado muestreo por rechazo. El enfoque ingenuo — valorAleatorio % rango — favorece muy ligeramente el extremo inferior del rango cada vez que 2³² no se divide exactamente entre el tamaño de ese rango. Esta herramienta, en cambio, calcula el mayor múltiplo de tu rango que cabe bajo 2³², y descarta (y vuelve a generar) cualquier valor bruto que caiga por encima de ese límite, de modo que cada número del rango recibe exactamente la misma cantidad de resultados brutos posibles que lo mapean — sin excepciones, sin sesgo, para cualquier rango que elijas.

Ejemplo práctico

Tira un dado: mínimo 1, máximo 6, así que el rango abarca 6 números. 2³² es 4.294.967.296, y 4.294.967.296 ÷ 6 deja un resto de 4 — así que el mayor múltiplo de 6 que cabe es 4.294.967.292. Cualquier resultado bruto que caiga en los 4 valores superiores (de 4.294.967.292 a 4.294.967.295) se descarta y se vuelve a generar; cualquier otro resultado se reduce con % 6 y se desplaza en 1 para caer entre 1 y 6. La tasa de descarte aquí es de apenas un 0,00000009% de los intentos — en la práctica, prácticamente nunca verás que ocurra un redibujo, pero la garantía se mantiene para cualquier rango, incluidos los tan pequeños que un módulo ingenuo sí distorsionaría visiblemente los resultados.

Con "Permitir duplicados" desmarcado — eligiendo 6 números únicos entre 1 y 49, como un boleto de lotería — la herramienta extrae números de la misma forma sin sesgo y mantiene un conjunto en curso, repitiendo la extracción ante cualquier repetición, hasta obtener 6 valores distintos. Pide más números únicos de los que el rango puede ofrecer — por ejemplo, 20 únicos de un rango de solo 10 — y verás un error claro en vez de un fallo silencioso: "No se pueden generar 20 números únicos entre 1 y 10 — ese rango solo tiene 10 números para elegir."

Preguntas frecuentes

¿Por qué crypto.getRandomValues en vez de Math.random?

Math.random() es un algoritmo pseudoaleatorio rápido y predecible, pensado para cosas como animaciones y juegos — no es criptográficamente seguro, y en algunos motores de navegador su estado interno puede reconstruirse a partir de un puñado de resultados. crypto.getRandomValues() toma valores de la fuente aleatoria criptográficamente segura del sistema operativo, la misma que se usa para generar claves de cifrado. Para un generador de números pensado para algo que importe — un sorteo, un juego, una muestra — esa es la fuente honesta sobre la que construir, el estándar que esta plataforma aplica a todos sus generadores.

¿Qué es el sesgo de módulo y cómo lo evita el muestreo por rechazo?

La forma ingenua de convertir un número aleatorio de 32 bits en, por ejemplo, una tirada de dado, es `valorAleatorio % 6`. Eso introduce sesgo cada vez que el rango de la fuente aleatoria no se divide exactamente entre tu rango objetivo — algunos restos terminan siendo ligerísimamente más probables que otros. Con una fuente de 32 bits (4.294.967.296 valores posibles) y un rango pequeño como 1–6, ese sesgo es astronómicamente diminuto, pero no es cero, y con fuentes más pequeñas (como un solo byte, 0–255) se vuelve lo bastante grande como para distorsionar resultados de verdad. El muestreo por rechazo lo elimina por completo: esta herramienta calcula el mayor múltiplo de tu rango que cabe en 32 bits, descarta cualquier resultado bruto que caiga por encima de ese límite, y solo conserva los que se reparten de forma exactamente uniforme. La tasa de descarte es minúscula (ver el ejemplo práctico), así que no cuesta nada en la práctica y garantiza sesgo cero para cualquier rango.

¿Puede repetirse el mismo número?

Depende de la casilla 'Permitir duplicados'. Marcada (la opción por defecto) significa que cada número se elige de forma independiente, así que las repeticiones son posibles y, en rangos pequeños, probables. Desmarcarla cambia a un muestreo sin reemplazo — la herramienta sigue eligiendo hasta obtener esa cantidad de números distintos, y entonces se detiene. Si pides más números únicos de los que el rango realmente contiene — por ejemplo, 20 números únicos entre 1 y 10 — no hay suficientes valores distintos para cumplir la petición, y la herramienta te lo indica en vez de quedarse colgada o devolver menos de lo pedido en silencio.

¿Qué tan grande puede ser el rango o el lote?

El mínimo y el máximo pueden ser cualquier número entero, positivo o negativo, siempre que la amplitud entre ellos (máximo − mínimo + 1) se mantenga por debajo de unos 4.290 millones — el tamaño de la fuente aleatoria de 32 bits que usa esta herramienta, más que suficiente para cualquier caso realista, desde lanzar una moneda hasta un rango de varios miles de millones. La cantidad está limitada a 1000 números por lote, igual que los otros generadores masivos de esta plataforma, y es instantáneo en ambos casos porque cada extracción rara vez necesita más de un intento.