Generador de Números Aleatorios
Generador de números aleatorios gratis en línea. Genera números aleatorios dentro de un rango específico con tamaño de paso y cantidad personalizables.
¿Cómo se generan los números aleatorios?
Hay dos familias: números aleatorios verdaderos y números pseudoaleatorios. La diferencia importa más de lo que parece.
Aleatoriedad verdadera: viene de procesos físicos que no se pueden predecir ni siquiera en principio: tiempos de desintegración radiactiva, ruido atmosférico captado por un micrófono, ruido térmico dentro de los osciladores en anillo de una CPU. La aleatoriedad es fundamental, no solo opaca. Los generadores de hardware en los chips modernos (RDRAND de Intel y AMD, TrustZone de ARM) alimentan entropía directamente de estas fuentes.
Pseudoaleatoriedad: viene de algoritmos deterministas — Mersenne Twister, xorshift, PCG, ChaCha20. Dado el mismo semilla (seed), siempre producen la misma secuencia. Son extremadamente rápidos y tienen excelentes propiedades estadísticas (pasan pruebas como Diehard y TestU01), pero no son impredecibles para quien conoce el algoritmo y la semilla. crypto.getRandomValues del navegador mezcla salida pseudoaleatoria con entropía del sistema operativo y resiembra con frecuencia, por eso se considera criptográficamente fuerte aunque técnicamente sea un PRNG.
¿Por qué importa la diferencia?
Criptografía: claves de cifrado, tokens de sesión y handshakes TLS necesitan ser impredecibles. Un fallo en la fuente aleatoria puede romper todo el sistema — recordemos el bug de OpenSSL de Debian de 2008, que dejó unas 250 000 claves SSH adivinables.
Equidad: en juegos, apuestas y loterías, la aleatoriedad predecible es explotable. Los RNG certificados (los que usan los casinos regulados) exigen tanto fortaleza criptográfica como rastro de auditoría.
Simulación: los métodos Monte Carlo en física, finanzas y aprendizaje automático corren sobre enormes volúmenes de números aleatorios. La velocidad importa más que la fortaleza criptográfica — la mayoría de investigadores usa Mersenne Twister o PCG, con semilla fija para reproducir resultados.
Tokens de seguridad: enlaces de recuperación de contraseña, claves API y secretos 2FA deben ser impredecibles. Un generador débil aquí falla en silencio: nada se rompe visiblemente, pero el atacante adivina el token.
Muestreo: en encuestas y estadística, cada miembro de la población debe tener la misma probabilidad de ser elegido. Un generador sesgado produce datos sesgados, y el sesgo a menudo no se nota hasta que la conclusión ya es errónea.
Acerca del Generador de Números Aleatorios
Elige un número entre cualquier mínimo y máximo, o genera una lista entera de una vez. Este generador usa la fuente de aleatoriedad criptográficamente fuerte del navegador (crypto.getRandomValues, la misma primitiva que produce las claves de sesión TLS) en lugar del clásico Math.random, que es rápido pero predecible: un atacante con paciencia puede reconstruir su estado interno tras observar unas pocas salidas. Para sorteos cotidianos — «quién va primero», «en qué restaurante hoy», un sorteo en la oficina — Math.random sirve. Para cualquier escenario donde la predicción importe, la fuente criptográfica es la opción correcta.
El parámetro de paso (step) controla la separación entre valores permitidos. Paso 1 en rango 1-10 da los enteros 1, 2, 3, ... 10. Paso 0.5 con el mismo rango da 1, 1.5, 2, 2.5, ... 10. Paso 2 en rango 0-20 da los pares. Si pones la longitud de lista mayor que 1, pasas del modo de un único tiro al modo lote y los resultados se unen con el delimitador que elijas — útil para datos de prueba rápidos.
¿Sirve este generador para uso criptográfico?
Sí: tira de crypto.getRandomValues, que la Web Crypto API del W3C define como criptográficamente fuerte. En la práctica el navegador delega en el pool de entropía del sistema operativo (/dev/urandom en Linux/macOS, BCryptGenRandom en Windows), la misma fuente que usan las librerías TLS y los generadores de claves SSH. Matiz: «sirve para cripto» significa que la fuente de entropía es buena; que el caso de uso sea seguro depende también de cómo manejes la salida. Generar una clave de 256 bits aquí y pegarla en un chat público derrota la idea al instante. Para uso local puntual (una contraseña fuerte, un token de sesión en tu propia app), la calidad de aleatoriedad es equivalente a la de una librería criptográfica profesional.
¿Puedo obtener la misma secuencia dos veces (aleatoriedad reproducible)?
Desde esta herramienta, no — crypto.getRandomValues está deliberadamente diseñada para no aceptar semilla, de manera que las salidas no se puedan repetir. Si necesitas aleatoriedad reproducible (simulación estadística, depuración, trabajo científico), usa un PRNG con semilla. En JavaScript, instala mulberry32 o un generador con semilla similar y pásale una semilla fija; misma semilla, misma secuencia. Compromiso: una secuencia con semilla es reproducible, pero quien aprenda la semilla puede repetirla — así que no uses PRNG con semilla para seguridad.
¿Cuál es el número más grande que puede generar?
Con seguridad hasta 2^53 - 1, es decir unos 9,007 billones (9 007 199 254 740 991). Ese es el Number.MAX_SAFE_INTEGER de JavaScript — el límite superior de enteros representables con exactitud en un flotante de 64 bits sin redondeo. Más allá, los enteros pierden precisión (la diferencia entre números representables supera 1). Para la mayoría de los usos — dados, lotería, porcentajes, valores financieros — este techo es irrelevante; solo importa para generar IDs muy grandes o nonces criptográficos, donde de todos modos usarías otra herramienta (basada en BigInt o salida en hex).
¿Cómo obtengo un decimal aleatorio (por ejemplo, entre 0 y 1)?
Pon mín en 0, máx en 1 y paso en una fracción pequeña como 0.01 o 0.001 según la precisión que necesites. Paso 0.01 da dos decimales (0.00 a 1.00). Paso 0.001 da tres. Si quieres una salida uniforme continua (cualquier real en [0, 1)), la primitiva subyacente es Math.random — y para ese caso, llamar a Math.random() en la consola suele ser más rápido que pasar por la herramienta. Para decimales con peso o no uniformes (gaussianos, exponenciales), necesitas una herramienta especializada — este generador es uniforme dentro del rango pedido.
¿Pueden salir duplicados al generar varios números?
Sí: por defecto cada número se genera de forma independiente, así que los duplicados no solo son posibles, son habituales. Con rango 1-10 y lista de 10, casi siempre hay repeticiones y faltan valores (es el «problema del cumpleaños» en acción). Si necesitas una muestra única — por ejemplo, sacar 10 números distintos de 1-100 — lo que realmente quieres es muestreo sin reposición, que esta herramienta no impone. Truco: genera más números de los que necesitas (30 desde 1-100, por ejemplo), elimina duplicados y toma los primeros N. Para barajar o sacar únicos, una herramienta de shuffle o permutación es la forma correcta.
¿Por qué Math.random() tiene mala fama?
Math.random() está diseñado para velocidad y corrección estadística, no para ser impredecible. Históricamente, distintos navegadores han usado distintos algoritmos: V8 (Chrome, Node) usa xorshift128+, SpiderMonkey (Firefox) usa xorshift; todos son rápidos pero con estados internos pequeños (~128 bits). Hay investigaciones que muestran que observar unas pocas centenas de salidas consecutivas basta para reconstruir el estado interno y predecir todos los valores futuros. Para juegos, animaciones y barajar un mazo en una experiencia offline de un solo jugador, Math.random() está bien. Para cualquier escenario multijugador, próximo al juego de azar o relacionado con seguridad, crypto.getRandomValues es lo correcto — y es lo que usa este generador.
¿Cómo interactúa el paso con mín y máx?
El generador produce valores de la forma mín + k × paso, donde k es un entero no negativo, recortado a ≤ máx. Así, rango 1-10 con paso 3 produce el conjunto {1, 4, 7, 10}, no enteros arbitrarios entre 1 y 10. Rango 0-1 con paso 0.1 da {0, 0.1, 0.2, ... 1.0}. Si el paso no divide exactamente (máx − mín), el valor máximo alcanzable queda justo por debajo del máx — por ejemplo 0-10 con paso 3 da {0, 3, 6, 9} (el 10 solo es alcanzable si equivale a mín + k × paso para algún k). Usa paso 1 para tiradas de dados con enteros normales.
¿Se guarda o se envía la salida a algún sitio?
No. La generación ocurre íntegramente del lado del cliente: mín, máx, paso y los números resultantes nunca salen de la página. No registramos, no enviamos a analítica ni transmitimos nada. La única actividad de red de esta página es cargar sus propios recursos (HTML, CSS, JS). Abre la pestaña Red del navegador antes de pulsar Generar; no verás peticiones nuevas. Por eso la herramienta es apta para uso criptográfico — una clave generada solo se filtraría si tú la copias y la pegas en algún sitio inseguro.
