Skip to content

Lección 41: Math.random()

Math.random() es un método que retorna un número pseudoaleatorio entre 0 (inclusive) y 1 (exclusivo). Es decir: [0, 1).

const aleatorio = Math.random();
console.log(aleatorio); // Ej: 0.7234567890123456

Para obtener enteros en un rango específico, combinamos Math.random() con Math.floor():

// Entero entre 0 y max-1
function aleatorio0aN(max) {
return Math.floor(Math.random() * max);
}
console.log(aleatorio0aN(10)); // Entero entre 0 y 9
// Entero entre min y max (ambos inclusive)
function aleatorioEntre(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(aleatorioEntre(1, 6)); // Simula un dado (1-6)
console.log(aleatorioEntre(1, 100)); // Número al azar entre 1 y 100
// Simular un dado
function lanzarDado() {
return Math.floor(Math.random() * 6) + 1;
}
console.log(`🎲 Dado: ${lanzarDado()}`);
// Lotería: elegir ganador
const participantes = ['Ana', 'Luis', 'Carlos', 'María', 'Pedro'];
const ganador = participantes[Math.floor(Math.random() * participantes.length)];
console.log(`🏆 Ganador: ${ganador}`);
// Color aleatorio
function colorAleatorio() {
const r = Math.floor(Math.random() * 256);
const g = Math.floor(Math.random() * 256);
const b = Math.floor(Math.random() * 256);
return `rgb(${r}, ${g}, ${b})`;
}
console.log(`🎨 Color: ${colorAleatorio()}`);
// Array de números aleatorios
const aleatorios = Array.from({ length: 5 }, () => Math.floor(Math.random() * 100));
console.log(aleatorios); // [42, 13, 78, 5, 91] (ejemplo)

Math.random() NO es criptográficamente seguro. No lo uses para:

  • Generación de contraseñas o tokens
  • Barajado de cartas en juegos de apuestas
  • Cualquier contexto de seguridad

Para usos seguros, usa crypto.getRandomValues():

// Generación segura
const array = new Uint32Array(1);
crypto.getRandomValues(array);
console.log(array[0]); // número aleatorio seguro

Además, Math.random() es pseudoaleatorio (algoritmo PRNG). La secuencia es determinista a partir de una semilla, aunque no podemos controlarla fácilmente.

Patrones útiles con Math.random():

// Booleano aleatorio (50%)
const moneda = Math.random() < 0.5;
// Elemento aleatorio de un array
const randomItem = arr[Math.floor(Math.random() * arr.length)];
// String aleatoria (ID corto)
const id = Math.random().toString(36).substring(2, 8);
console.log(id); // Ej: "a3x9kf"
// Mezclar array (Fisher-Yates shuffle)
function mezclar(array) {
const arr = [...array];
for (let i = arr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}

Escribe una función generarCodigo que genere un código alfanumérico de 6 caracteres (mayúsculas y números). Ejemplo: “A3K9F1”.

function generarCodigo() {
const caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
// Tu código aquí
}
console.log(generarCodigo()); // Ej: "X7P2M9"
console.log(generarCodigo()); // Ej: "Q1R5T3"