Generar número aleatorio — RNG entero, decimal y rangos online
Saca un único número, extrae una muestra de lotería o genera un conjunto sin repeticiones para sorteos y emparejamientos — todo desde una página que funciona sin servidor. Indica el mínimo y máximo (se aceptan negativos y rangos invertidos), elige cuántos números quieres (1 a 100) y, opcionalmente, fuerza la unicidad para que ningún valor se repita o activa el orden automático para leer mejor el resultado. El modo por defecto muestrea cada número de forma independiente con reemplazo, ideal para tiradas tipo dado; activar solo-únicos cambia a una mezcla Fisher-Yates del pool completo, lo que necesitas para sorteos de lotería o asignar tareas numeradas a miembros del equipo.
Sobre esta herramienta
Los números vienen de la Web Crypto API del navegador (crypto.getRandomValues), la misma fuente criptográficamente segura que usan los generadores de contraseñas y el handshake TLS. El rejection sampling evita el sesgo de módulo que introduce el típico `random() % range` — cada valor del rango tiene exactamente la misma probabilidad, incluso cuando el tamaño del rango no divide exactamente 2^32. El modo solo-únicos usa una mezcla Fisher-Yates imparcial sobre el pool de enteros, garantizando una permutación real en lugar de reintentar al detectar duplicados (lento y sesgado cerca del límite). Los rangos negativos, los mín/máx invertidos y las cantidades mayores que el rango se gestionan de forma elegante — la herramienta intercambia extremos y recorta la cantidad automáticamente. Úsalo para sorteos, rifas escolares, asignación aleatoria de tests A/B, elegir ganadores de un concurso, generar datos de prueba o simplemente decidir quién paga la comida.
- Aleatoriedad criptográfica vía Web Crypto (sin sesgo de módulo de Math.random)
- Mín y máx personalizables — acepta negativos y entradas invertidas
- Genera de 1 a 100 números por tirada
- Modo solo-únicos con mezcla Fisher-Yates (permutación real)
- Opción de orden automático para leer mejor secuencias largas
- Copia los resultados (separados por comas) al portapapeles con un clic
- Recorta la cantidad al tamaño del rango cuando se exige unicidad
- Funciona sin conexión una vez cargado — sin ida y vuelta al servidor
- Apto para loterías, sorteos, emparejamientos y muestreo aleatorio
- Cero recolección de datos — tus entradas y resultados no salen del navegador
Gratis. Sin registro. Tus datos permanecen en tu navegador. Anuncios mediante Google AdSense (con consentimiento).
Preguntas frecuentes
¿Es realmente aleatorio este generador o es solo `Math.random()` con otra etiqueta?
No es `Math.random()`. Cada tirada llama a `crypto.getRandomValues()` de la W3C Web Cryptography API (Recomendación de 26 de enero de 2017), que toma bytes del pool de entropía del sistema operativo (Linux `/dev/urandom`, framework Security de macOS, `BCryptGenRandom` en Windows) — la misma fuente que los gestores de contraseñas modernos y los handshakes TLS. `Math.random()` es rápido pero V8 (Chrome, Node, Edge) y SpiderMonkey (Firefox) lo implementan con el algoritmo xorshift128+ (Vigna 2014; V8 lo adoptó en v4.9.41 con Chrome 49 estable en marzo de 2016, sustituyendo a MWC1616) — pasa la batería estadística BigCrush pero no es criptográficamente seguro y sería la primitiva equivocada para una herramienta que entrega números de lotería, sorteos o tokens de sesión.
¿Qué es el "sesgo de módulo" y por qué importa para tiradas justas?
El sesgo de módulo es la pequeña pero sistemática desviación que aparece al tomar un entero de un rango uniforme y reducirlo mod N cuando N no divide al rango fuente de forma exacta. La fuente subyacente aquí es un entero de 32 bits sin signo (rango 0..2³²−1). Si pides un número en 1..100, el ingenuo `r % 100` da a cada valor de 0..95 una probabilidad de 42.949.673 mapeos sobre 2³² y a cada valor de 96..99 solo 42.949.672 mapeos — los números bajos son ligeramente más probables. El exceso por valor bajo es de 1/2³² ≈ 1 entre 4.300 millones, invisible para un lanzamiento de moneda pero acumulativo en millones de tiradas (loterías reguladas, emisión de tokens de seguridad). La solución es rejection sampling: tira, comprueba si el valor cae dentro del múltiplo mayor de N que cabe, reintenta si no. El `randInt(n)` de esta herramienta hace exactamente eso — el número esperado de reintentos está acotado por 2 sea cual sea N, así que el coste es despreciable.
¿Por qué el modo solo-únicos usa Fisher-Yates en lugar de reintentar cuando ve un duplicado?
El reintento sobre duplicados (el enfoque obvio) se vuelve patológicamente lento cuando el número de tiradas se acerca al tamaño del rango — extraer las últimas unidades únicas de 1..100 requiere de media unas 519 tiradas para conseguir los 100 distintos (el límite del coleccionista de cupones, n · H_n ≈ 100 × 5,187) y sesga las últimas porque los duplicados desplazan la distribución empírica. Fisher-Yates (Algoritmo P de Knuth en Art of Computer Programming Vol 2 §3.4.2 de 1969, adaptación in-place de Durstenfeld CACM 1964 del procedimiento original de Fisher y Yates 1938 con lápiz y papel) genera una permutación uniformemente aleatoria del pool entero en tiempo O(rango) y espacio O(rango), y luego toma los primeros N elementos. Toda permutación es igualmente probable, todo conjunto solo-único es igualmente probable, y el tiempo de ejecución se mantiene lineal en el tamaño del rango sin importar cuántos se extraigan.
¿Vale esto para una lotería real, sorteo legal o decisión crítica de negocio?
Para usos de bajo riesgo (rifa de oficina, asignación de asientos en clase, cubeta de test A/B, elegir un ganador de un hilo de comentarios) la fuente `crypto.getRandomValues()` de esta herramienta basta y sobra — es la misma primitiva que la RFC 4086 (Eastlake/Schiller/Crocker BCP 106 de junio de 2005) recomienda para generación de claves criptográficas no adversariales. Para loterías reguladas (juegos con licencia estatal, muestreo aleatorio de valores, aleatorización de ensayos clínicos) la regla es procedimental, no estadística: los reguladores exigen pista de auditoría (semillas registradas, sorteos atestiguados, cadenas hash de terceros) y un RNG hardware con pruebas estadísticas periódicas (NIST SP 800-22, validación de módulo FIPS 140), ninguno de los cuales una herramienta del lado del cliente puede proporcionar. Conviene reservarla para tiradas cotidianas; para algo legalmente vinculante toca un servicio regulado auditado o un sorteo físico notarizado.
¿Y para números aleatorios decimales o números fuera del rango 1..2³²?
Esta herramienta genera enteros — eso es lo que produce `randInt(maxExclusive)` desde `crypto.getRandomValues()` con rejection sampling. El tope interno son 2³² porque el buffer de entropía subyacente es un Uint32Array; los rangos hasta unos 4.290 millones funcionan de forma nativa, más allá haría falta una tirada multipalabra que esta herramienta no expone. Para números aleatorios en coma flotante en [0, 1) la función auxiliar `rand()` de `src/lib/random.ts` divide un Uint32 por 2³², dando 32 bits de precisión fraccional — suficiente para la mayoría de simulaciones pero no los 53 bits totales de un double de JavaScript (la solución es `crypto.getRandomValues()` con un `BigUint64Array` para doubles de 64 bits). Los rangos negativos, los `min/max` invertidos y las cantidades mayores que el rango entero se gestionan intercambiando extremos y recortando la cantidad automáticamente.
Fuentes (7)
- Knuth, D. E. (1997). The Art of Computer Programming, Volume 2: Seminumerical Algorithms — §3.4.2 Algorithm P (Shuffling) — the in-place O(n) shuffle that this tool uses for the unique-only mode; Knuth attributes the modern computer-friendly variant to Durstenfeld 1964 and acknowledges the original 1938 pencil-and-paper version by Fisher & Yates. Addison-Wesley, 3rd edition (1997, ISBN 0-201-89684-2); §3.4.2 Algorithm P first published in 1st edition 1969.
- Durstenfeld, R. (1964). Algorithm 235: Random permutation — the in-place computer-friendly shuffle that Knuth later named Algorithm P; iterates from the last element down, swapping each element with a uniformly chosen index in the unshuffled prefix; runs in O(n) time and O(1) extra space (vs Fisher & Yates 1938 original O(n²)). Communications of the ACM, Vol. 7, No. 7, p. 420 (July 1964).
- World Wide Web Consortium (W3C) (2017). Web Cryptography API — defines `crypto.getRandomValues()`, the cryptographically secure pseudo-random source used by this tool (and by password generators, TLS handshakes, and session-token issuers); fills a TypedArray with values from the operating-system entropy pool — fundamentally different from `Math.random()`, which V8 implements as xorshift128+ (since v4.9.41, Chrome 49 stable March 2016) and is not suitable for security-sensitive draws. W3C Recommendation 26 January 2017 (Crypto.getRandomValues §3.3); Web Cryptography API Level 2 in progress as of May 2026.
- Eastlake III, D., Schiller, J., & Crocker, S. (2005). RFC 4086 — Randomness Requirements for Security (BCP 106) — catalogs poor entropy sources (system uptime in seconds, low-resolution timers, clock skew alone) and pitfalls of weak PRNGs in security-sensitive contexts; obsoletes RFC 1750; recommended reading for any tool that issues lottery numbers, raffle picks, or session tokens. IETF Best Current Practice 106, June 2005; authors at Motorola Laboratories (Eastlake), MIT (Schiller), and Shinkuro Inc. (Crocker).
- Vigna, S. (2014). Further scramblings of Marsaglia's xorshift generators — introduced the xorshift128+ algorithm that V8 (Chrome, Node.js, Edge, Opera) and SpiderMonkey (Firefox) use to implement `Math.random()` since V8 v4.9.41; passes the BigCrush battery from TestU01 but does not pass all linearity tests (later shown by Lemire & O'Neill 2018) and is NOT cryptographically secure. Journal of Computational and Applied Mathematics 315 (May 2017) pp 175-181; pre-print arXiv:1404.0390 (April 2014, last revised 2016).
- National Institute of Standards and Technology (NIST) (2010). NIST SP 800-22 Revision 1a — A Statistical Test Suite for Random and Pseudorandom Number Generators for Cryptographic Applications — the test battery (frequency, runs, longest-run, rank, FFT, non-overlapping/overlapping templates, Maurer's universal, linear complexity, serial, approximate entropy, cumulative sums, random excursions) that regulators require periodic hardware-RNG products to pass; FIPS 140 module validation programs incorporate it. NIST Special Publication 800-22 Rev 1a, April 2010 (Bassham et al.); reaffirmed by NIST 2025.
- World Wide Web Consortium (W3C) (2018). Web Content Accessibility Guidelines (WCAG) 2.1 — Success Criterion 4.1.3 Status Messages requires that operations producing dynamic content (the generated number list, the running tally) expose changes via `aria-live` regions so assistive technology users hear updates without a focus shift. W3C Recommendation 5 June 2018; carried unchanged into WCAG 2.2 (Recommendation 5 October 2023).
Son las publicaciones originales en las que se basan las fórmulas de esta herramienta. Localízalas con el nombre de la revista y el año en Google Scholar o PubMed.
Por Marco B. ·