Command Palette

Search for a command to run...

Cómo generar números aleatorios en línea: rangos, conjuntos únicos y cuándo la aleatoriedad realmente importa

Cómo generar números aleatorios en línea: rangos, conjuntos únicos y cuándo la aleatoriedad realmente importa

T
Toolz Team
|Aug 23, 2026|15 Min Lectura

Parte de la colección generadores

La primera vez que me mordieron números aleatorios fue en un proyecto paralelo de Laravel años antes de comenzar a crear Toolz.dev. Necesitaba códigos de referencia cortos, buscados rand() porque estaba ahí y lo envió. Una semana después, dos usuarios tenían el mismo código. No porque las probabilidades fueran astronómicas, sino porque había entendido mal qué rand() realmente prometido. Esa pequeña vergüenza me enseñó una lección que he llevado a cada herramienta en Toolz.dev: "random" no es una cosa. Existe el aleatorio casual que está bien para tirar dados, y existe el aleatorio serio que necesitas en el momento en que un valor protege algo.

Esta guía es la versión larga de lo que desearía que alguien me hubiera dicho en aquel entonces. Analizaré cómo generar números aleatorios con el Generador de números aleatorios en Toolz.dev, cuando los conjuntos únicos importan, por qué la fuente de aleatoriedad cambia para qué puedes usar la salida de manera segura y los casos prácticos en los que la busco mientras construyo.

TL;Dr: Un generador de números aleatorios extrae valores de un rango que usted define. Establezca un mínimo y un máximo, elija cuántos números desea y elija números enteros o decimales. Active solo único cuando ningún valor pueda repetirse, que es lo que desea para loterías, rifas y muestreos sin reemplazo. El generador Toolz.dev se ejecuta completamente en su navegador y prefiere la API Web Crypto por su aleatoriedad, por lo que nada de lo que genere sale de su dispositivo.

¿Qué hace realmente un generador de números aleatorios?

Un generador de números aleatorios asigna una fuente impredecible de bits a un rango. Ese es todo el trabajo. En un navegador la fuente que importa es crypto.getRandomValues(), que la API de criptografía web requiere que sea criptográficamente sólida, a diferencia de Math.random(), lo que no hace tal promesa. Le dices el intervalo, digamos del 1 al 100, y devuelve un valor desde dentro de ese intervalo donde, idealmente, cada valor tiene las mismas posibilidades de aparecer. Pide más de uno y repite el sorteo.

La parte interesante es la palabra " impredecible," porque las computadoras son máquinas deterministas que naturalmente no producen sorpresa. Lo que producen es pseudoaleatoriedad: una secuencia que parece aleatoria y pasa pruebas estadísticas pero que es generada por un algoritmo a partir de una semilla inicial. Dale al mismo algoritmo la misma semilla y obtendrás la misma secuencia cada vez. Esa reproducibilidad es una característica cuando escribes una prueba que debe ser repetible y una responsabilidad cuando acuñas algo que debe ser indescuidable.

En Toolz.dev, el generador se encuentra en el navegador y lee sus bits crypto.getRandomValues Cuando el navegador lo expone, lo que hace todo navegador moderno. Esa función está definida por la API de criptografía web W3C y está respaldada por el sistema operativo 's fuente criptográficamente segura. Cuando esa fuente está presente, los números son lo suficientemente impredecibles para trabajos adyacentes a la seguridad, como elegir tokens o barajar un mazo. Cuando de alguna manera no está disponible, la herramienta vuelve al generador JavaScript estándar, lo cual está bien para juegos y muestreo, pero nunca debe sembrar nada secreto. Saber en cuál de esos dos mundos te encuentras es lo más importante de usar bien cualquier RNG.

¿cómo genero números aleatorios en Toolz.dev?

El flujo es deliberadamente corto porque la mayoría de las veces solo quieres un número y lo quieres ahora.

Primero, establezca el rango. Ingrese el mínimo y el máximo. Para números enteros, el rango es inclusivo en ambos extremos, por lo que 1 a 6 puede devolver cualquiera de 1, 2, 3, 4, 5 o 6, exactamente como un dado. Los valores negativos y los rangos que abarcan cero, como -50 a 50, funcionan de la misma manera.

En segundo lugar, elige cuántos números quieres. Un número para una selección rápida, o un lote de hasta diez mil cuando siembra datos de prueba o construye una muestra.

En tercer lugar, elija las opciones. Deja "solo enteros" activado para números enteros, o apágalo y establece el número de decimales cuando necesites valores fraccionarios. Activa " valores únicos solamente" cuando ningún número pueda repetirse.

Finalmente, haga clic en Generar. El resultado muestra la lista junto con la suma y el promedio, y el lote completo se copia como una lista separada por nuevas líneas, por lo que cae directamente en una columna de hoja de cálculo, un script o un dispositivo de prueba. Si ha utilizado el generador de UUID o el generador de contraseñas en Toolz.dev, la forma de esto me resultará familiar, porque trato de mantener los generadores consistentes.

¿cuándo debo utilizar números únicos?

Esta es la opción que la gente extraña y es la que más cambia las matemáticas.

De forma predeterminada, el generador dibuja con reemplazo. Cada sorteo es independiente, por lo que un número puede aparecer más de una vez en el mismo lote. Eso es correcto para tirar dados, porque un par de dados real puede generar dos cuatros. Pero está mal para un sorteo de lotería, una rifa o cualquier momento en el que elijas una muestra sin volver a colocar el token en la bolsa.

Encienda solo único y el generador se extrae sin reemplazo. Mantiene un registro de lo que ya ha producido y omite repeticiones hasta que haya llenado su lote. El uso clásico son los números de lotería: si quieres seis números del 1 al 49 sin duplicados, solo único es la diferencia entre un billete válido y uno roto.

Aquí hay un límite natural y la herramienta lo respeta. No puedes dibujar más números enteros únicos de los que puede contener el rango. Pida diez números únicos entre 1 y 5 y no habrá una respuesta válida, porque en ese intervalo sólo existen cinco números enteros distintos. En lugar de girar para siempre tratando de encontrar un sexto valor imposible, el generador se detiene y le dice que el alcance es demasiado pequeño. Construí ese protector a propósito después de ver demasiados bucles aleatorios ingenuos colgados en el código de producción.

Enteros o decimales: ¿qué necesito?

Los números enteros cubren la mayoría de las solicitudes. Los dados, las bolas de lotería, los índices de matrices y los recuentos de registros son números enteros, y el modo entero le brinda un rango inclusivo que coincide con la forma en que la gente piensa sobre esas cosas.

Los decimales son para cantidades continuas: un precio aleatorio, una lectura de sensor simulada, un peso, una probabilidad. Desactive el modo entero y la herramienta se basa en el intervalo medio abierto que incluye el mínimo pero no el máximo. Esa convención medio abierta, mínima incluida y máxima excluida, es la misma que subyace a casi todos los RNG de punto flotante en todos los idiomas, incluido JavaScript's propio Math.random, que devuelve un valor en el rango de 0 hasta 1, pero sin incluirlo. Hacer coincidir esa convención significa que los números que obtienes aquí se comportan como los números que obtendrías en código.

También controlas el número de decimales, del uno al diez. Dos lugares son adecuados para valores similares a divisas, más cuando se simulan mediciones que necesitan una resolución más fina. Tenga en cuenta que casi siempre es satisfactorio sólo un único más decimales porque el espacio de distintos decimales es enorme, mientras que sólo un único más un pequeño rango de enteros es donde golpea la pared descrita anteriormente.

¿qué tan aleatorio es "suficientemente aleatorio"?

Aquí está la tabla que desearía haber visto antes de ese incidente del código de referencia. Asigna los casos de uso comunes al tipo de aleatoriedad que realmente requieren.

Caso de uso Se necesita aleatoriedad ¿se permiten repeticiones? notas
Dados, juegos de mesa Pseudoaleatorio está bien La independencia por tirada es el punto
Elegir un ganador aleatorio Preferiblemente criptográfico No (solo único) La equidad importa, utilice únicamente productos únicos
Números de lotería o rifa Preferiblemente criptográfico No (solo único) Empate sin reemplazo
Filas de muestreo para análisis Pseudoaleatorio está bien por lo general no Único sólo para muestreo sin reemplazo
Accesorios de prueba de siembra Pseudoaleatorio está bien La reproducibilidad puede incluso ser deseable
Tokens de seguridad, secretos Se requiere criptográfico prohibido Nunca utilices un PRNG simple aquí

La fila que hace tropezar a las personas es "tokens de seguridad." Un RNG de uso general, incluso uno bueno, no sustituye a un generador secreto especialmente diseñado. Si está creando una clave API, un token de sesión o una contraseña, utilice una herramienta diseñada para ese trabajo, como generador de contraseñas, o una herramienta hash como generador de hash cuando necesitas un resumen de longitud fija. El generador de números aleatorios es para números en un rango, no para material clave criptográfico, y el encuadre honesto de ese límite es más útil que pretender que una herramienta lo haga todo.

¿Qué puedo construir realmente con él?

Algunas de las formas en que esto gana su lugar en mi flujo de trabajo.

Cuando pruebo una interfaz de usuario que representa listas, genero un lote de unos cientos de números para sustituir cantidades, precios o puntuaciones, los pego en un dispositivo y, de repente, el diseño se ejercita con una variedad realista en lugar de los mismos tres. filas escritas a mano. Para el trabajo de WordPress en WP Adminify, he utilizado valores aleatorios para completar el contenido de demostración para que una pantalla de configuración luzca viva en una captura de pantalla.

Cuando un cliente realiza un sorteo, el modo exclusivo selecciona a los ganadores de manera justa de una lista numerada de participantes. Asigne a cada participante un número, extraiga tantos ganadores únicos como premios haya. Sin fórmula de hoja de cálculo, no hay discusión sobre si el sorteo fue manipulado, porque los números provienen de una fuente que ninguno de nosotros controla.

Para una intuición estadística rápida, generar un lote grande y observar la suma y el promedio es una verificación rápida de la cordura de que el rango y la distribución se están comportando. Si pido números del 1 al 100 y el promedio vuelve a acercarse a 50, el mundo es el esperado.

Y para lo cotidiano, es un rodillo de dados, un lanzamiento de moneda cuando tratas 1 y 2 como cara y cruz, y un " elige un número" colono de pequeños argumentos. No todos los usos tienen que ser serios para ser útiles.

¿Cómo se compara esto con escribir el tuyo propio?

Podrías escribir Math.floor(Math.random() * (max - min + 1)) + min y listo. He escrito esa línea mil veces. Entonces, ¿por qué buscar una herramienta?

Dos razones, ambas aprendieron por las malas. El primero son los errores de sesgo de módulo y uno por uno que se introducen en las matemáticas de rango manual, especialmente una vez que se agrega el límite inclusivo versus exclusivo y el requisito único único. La herramienta maneja los casos de borde, incluido " pediste más valores únicos de los que existen" caso, por lo que no los redescubres a las 2 am. El segundo es ese Math.random explícitamente no es criptográficamente seguro, un hecho que la documentación de MDN establece claramente, y es fácil olvidar que cuando pegas un fragmento en un código que luego protege algo real. El generador Toolz.dev utiliza de forma predeterminada la fuente criptográfica, por lo que el comportamiento más seguro es el que se obtiene sin pensarlo.

Para un número único en un entorno que controlas, un fragmento está bien. Para sorteos repetibles, conjuntos únicos, lotes que desea copiar o cualquier cosa donde desee la fuente criptográfica de forma predeterminada, la herramienta guarda las partes complicadas.

Si su trabajo se inclina más hacia la codificación y el formato que hacia la generación de números, la misma filosofía del lado del cliente se ejecuta en el resto de la caja de herramientas, desde el lorem ipsum generador de texto de marcador de posición para el conjunto más amplio cubierto en Herramientas de productividad para desarrolladores guía. Y debido a que cada uno de estos se ejecuta localmente, el privacidad de datos la historia es la misma en todos ellos: tus entradas permanecen en tu navegador.

¿Cuáles son los errores comunes que comete la gente con números aleatorios?

Después de años de revisar el código, el mío y otras personas 's, el mismo puñado de errores aparecen una y otra vez, y vale la pena nombrarlos para que puedas evitarlos.

El primero es confuso " improbable" con "imposible." Mi historia de código de referencia es exactamente esta. Cuando dibujas con reemplazo de un rango, las colisiones no son un error, son una certeza estadística dados suficientes sorteos. La paradoja del cumpleaños es la ilustración clásica: en un grupo de sólo 23 personas, la probabilidad de que dos compartan un cumpleaños es superior al 50 por ciento, mucho mayor de lo que sugiere la intuición, porque estás comparando cada par, no comparando a todos con una fecha fija. Si tus valores deben ser únicos, no esperes que el rango sea lo suficientemente grande. Encienda solo único y elimine la duda.

El segundo es buscar la fuente equivocada. Muchos tutoriales muestran una fórmula de rango basada en Math.random y nunca menciones que no es adecuado para nada sensible a la seguridad. El valor parece aleatorio, la demostración funciona y el hábito se mantiene. Luego alguien copia ese fragmento en un código que genera un token de restablecimiento de contraseña, y ahora el token "random" es predecible para cualquiera que comprenda el algoritmo subyacente. La regla es contundente: si un humano nunca debería poder adivinar el valor, necesita una fuente criptográfica. El generador Toolz.dev tiene por defecto esa fuente, que es el valor predeterminado más seguro para desarrollar un hábito.

El tercero son los errores uno por uno en los límites del rango. Los puntos finales inclusivos versus exclusivos hacen tropezar incluso a los desarrolladores experimentados, porque diferentes lenguajes y diferentes funciones toman diferentes decisiones. ¿Es 100 una salida posible cuando pido de 1 a 100? Para números enteros aquí, sí, se incluyen ambos extremos. Para decimales se excluye el máximo, coincidiendo con la convención de punto flotante. Ser explícito sobre qué convención se aplica evita el error silencioso de que tus dados nunca tiran un seis porque escribiste < max en vez de <= max.

El cuarto supone que una pequeña muestra parece aleatoria. La verdadera aleatoriedad produce grupos y rayas. Voltear una moneda justa diez veces y una tirada de cuatro caras es completamente normal, pero la gente la ve y asume que la moneda, o el generador, está roto. La aleatoriedad no es lo mismo que el espaciado uniforme. Si quieres valores espaciados uniformemente, no quieres un generador de números aleatorios en absoluto, quieres una secuencia. Saber cuál necesitas realmente es la mitad de la batalla.

Preguntas frecuentes

¿Cómo funciona un generador de números aleatorios?

Un generador de números aleatorios asigna una fuente impredecible de bits al rango que elija. Esta herramienta lee bytes de la API Web Crypto cuando está disponible y los escala en su intervalo mínimo a máximo, de modo que cada valor en el rango tiene las mismas posibilidades de ser dibujado.

¿Son los números realmente aleatorios?

Son números pseudoaleatorios criptográficamente fuertes, que son impredecibles para todos los fines prácticos. Cuando el navegador expone crypto.getRandomValues, la salida es adecuada para tokens y barajado; Si solo está disponible el generador estándar, los valores todavía están bien distribuidos pero no deben usarse para secretos.

¿Cómo genero números aleatorios únicos sin repeticiones?

Habilite la opción única antes de generar. Luego, la herramienta dibuja sin reemplazo, por lo que cada número del lote es diferente. Si solicita más números enteros únicos de los que puede contener el rango, se lo indica en lugar de realizar un bucle para siempre.

¿puede generar números decimales?

Sí. Desactive la opción de números enteros y establezca cuántos decimales desea. Los decimales se extraen del intervalo medio abierto que incluye el mínimo pero no el máximo, que es la convención estándar para rangos continuos.

¿Puedo usar números negativos?

Sí. Ingrese un mínimo negativo, un máximo negativo o un rango que abarque cero, como -50 a 50. El generador maneja rangos negativos y mixtos de la misma manera que maneja los positivos.

¿Cuántos números puedo generar a la vez?

Hasta 10.000 números por lote. El resultado incluye la suma y el promedio para que pueda verificar la cordura de lotes grandes de un vistazo, y la lista completa se copia como valores separados por nuevas líneas.

¿Este generador de números aleatorios es gratuito y privado?

Sí. Es gratuito, sin registro ni límite de uso, y cada número se genera en su navegador. Nunca se transmite ningún rango, recuento o resultado a un servidor.

¿Para qué puedo utilizar un generador de números aleatorios?

Los usos comunes incluyen elegir números de lotería o rifa, tirar dados para juegos, elegir un ganador aleatorio, sembrar datos de prueba, muestrear filas para análisis y aleatorizar el orden de una lista. El modo exclusivo cubre cualquier caso que necesite muestreo sin repeticiones.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!