Cotidiano

Cómo elegir un ganador al azar de una lista sin que nadie pueda discutirlo

Pega los nombres, sortea una vez y para ahí. Lo difícil no es el sorteo: es la lista y las reglas que la rodean.

Pon cada participación en su propia línea, mezcla la lista entera una sola vez con un algoritmo que trate todas las posiciones por igual y quédate con lo que termine arriba. Ese es el método, y toma unos 30 segundos con un selector aleatorio que sortea a partir de una lista pegada. Lo que decide si el resultado sobrevive al contacto con los perdedores es todo lo que rodea al sorteo: una lista con la misma persona tres veces, una mezcla que favorece ciertas posiciones sin que se note y reglas que se inventan después de que aparece el nombre.

Cómo hacer el sorteo en cinco pasos

  1. Reúne las participaciones en texto plano, una por línea. Nombres, números de ticket, correos electrónicos, lo que identifique a una persona sin ambigüedad.
  2. Saca los duplicados y a quien no cumpla los requisitos, antes de sortear.
  3. Di en voz alta —o escribe en la publicación— cuántos ganadores hay y qué pasa si alguno no responde.
  4. Sortea una sola vez.
  5. Anuncia el resultado con el número de participaciones al lado: «uno entre 142 participaciones» dice más que un nombre solo.

El paso cuatro es donde se hace la trampa. Un sorteo que repites hasta que te gusta la respuesta no es un sorteo, y la gente se da cuenta.

Define las reglas antes de apretar el botón

Cada regla que agregas después de ver al ganador parece una regla que agregaste por el ganador. Resuelve esto primero:

Nada de eso es un problema técnico, y por eso los sorteos que terminan en discusión suelen caerse por ahí y no por la aleatoriedad.

Limpia la lista primero

La mayoría de las listas de participantes llegan hechas un desastre: la exportación de un formulario, un hilo de comentarios, un canal de chat donde la gente respondió. Antes de sortear, la lista tiene que tener exactamente una línea por participación válida.

Un selector puede hacer una parte de eso por ti. Las líneas vacías se saltan, los espacios alrededor de una entrada se recortan y «ignorar líneas repetidas» —activado por defecto— junta las entradas que solo se diferencian en mayúsculas, así que anna y Anna cuentan una vez. Lo que ninguna herramienta puede deducir es que «Anna Smith» y «A. Smith» son la misma persona, o que dos personas distintas se llaman las dos Chris. Eso lo revisas a ojo. Si la lista cruda salió de una hoja de cálculo o de un hilo sacado con scraping, una pasada en serio para quitar las líneas repetidas de una lista antes de pegarla te va a ahorrar la discusión.

Otra cosa que vigilar: una línea es una participación. Pega una fila de CSV y la fila entera —comas, correo electrónico, marca de tiempo— se convierte en una sola participación con un nombre enterrado adentro.

¿Un selector aleatorio en línea es realmente aleatorio?

Eso lo deciden dos cosas, y las dos son invisibles desde afuera.

La primera es la mezcla. El truco popular de una sola línea es ordenar la lista con un comparador que devuelve un número al azar. Parece ingenioso y no produce un orden aleatorio. Los algoritmos de ordenamiento dan por hecho que la comparación es consistente: si A va antes que B una vez, eso se mantiene. Dales el resultado de lanzar una moneda y el desenlace depende de qué pares comparó ese algoritmo en particular, y en qué orden. Las entradas tienden a terminar cerca de donde empezaron, y el sesgo cambia de un navegador a otro porque sus implementaciones de sort son distintas.

El algoritmo correcto, Fisher-Yates, no es más difícil: recorre la lista hacia atrás desde la última posición y, en cada paso, intercambia el elemento actual con uno elegido al azar entre esa posición y las anteriores. Todos los órdenes posibles salen con la misma probabilidad.

La segunda es la fuente de aleatoriedad. Math.random() es una fórmula con una semilla que se fija una sola vez y produce una secuencia que parece aleatoria y está determinada por completo por esa semilla. Sirve para el temblor de una animación. crypto.getRandomValues() toma del generador criptográfico del navegador, sembrado por el sistema operativo: la misma maquinaria que hay detrás de las claves de cifrado. Para decidir quién paga el café es un exceso absurdo. Para un sorteo donde hay algo en juego elimina toda una categoría de reclamos sin ningún esfuerzo extra, y es lo que usa el selector de este sitio.

Por qué tomar el resto de la división es levemente injusto

Convertir un número aleatorio de 32 bits en un número entre 0 y 9 tomando el resto introduce un sesgo mínimo, porque 4.294.967.296 no es múltiplo de 10 y el pedazo que sobra arriba hace que los primeros seis resultados sean marginalmente más probables. En una lista de 20 nombres nadie podría detectarlo jamás. Quitarlo es trivial de todos modos: descarta cualquier valor que caiga en el bloque final incompleto y vuelve a sortear.

¿Cómo eliges varios ganadores sin repetir?

La gente quiere decir dos cosas distintas con esto, y confundirlas es la forma en que la misma persona termina ganando el primer y el segundo premio.

Varios ganadores de una vez. Pide la cantidad que quieras en un solo sorteo. Una mezcla seguida de tomar las tres primeras líneas devuelve tres líneas distintas, garantizado, sin ninguna posibilidad de colisión. Aunque líneas distintas no es lo mismo que personas distintas: si alguien está diez veces en la lista por participaciones extra, dos de esos tres lugares pueden caer en el mismo nombre.

Rondas, sorteadas de a una. Primer premio, después el segundo, después el tercero. Aquí quieres que el ganador salga de la lista entre una ronda y otra; si no, cada ronda arranca desde la lista completa y una repetición es perfectamente posible. Marcar «borrar a los ganadores de la lista después de elegir» hace exactamente eso: sale cada resultado y el nombre desaparece de la caja, así que la ronda siguiente corre sobre lo que queda.

En cualquiera de los dos casos, la herramienta olvida todo cuando la página se recarga: la lista y qué nombres ya salieron. Copia el resultado de cada ronda en algún lado antes de tocar esa pestaña.

Si lo que quieres es un orden de turnos y no un ganador —turnos de presentación, quién patea los penales, la rotación de tareas de la casa—, usa el modo de mezcla y lee la lista entera de arriba abajo. El mismo algoritmo, otra salida, aunque el panel de resultados se corta en las 500 filas y te dice cuántas dejó fuera.

¿Puedes darle a alguien más probabilidades?

Solo poniéndolo en la lista más de una vez. Diez participaciones por recomendar a alguien significan diez líneas con ese nombre, y tienes que desactivar el filtro de duplicados para que esas líneas cuenten: existe para limpiar datos pegados y no sabe distinguir entre una repetición que buscabas y una que no.

No hay un campo de peso ni una casilla de porcentaje, y es un límite deliberado. Es muy fácil equivocarse de forma sutil en un sorteo ponderado, y una lista que puedes leer y contar es una lista que puedes entregarle a alguien que no está de acuerdo contigo.

Por qué el mismo nombre puede salir dos veces

Saca un nombre de veinte hoy y otro mañana: hay una probabilidad de uno entre veinte de que sea el mismo nombre. La gente lee eso como una falla. Es lo contrario: un generador que se negara a repetir sería el sesgado. A nadie «le toca», cada sorteo no sabe nada del anterior, y una secuencia genuinamente aleatoria tiene grupos y rachas que una persona tratando de fingir azar nunca escribiría.

Cuando la imparcialidad tiene que poder demostrarse

Aquí es donde un selector que corre en el navegador se queda corto. El sorteo es justo; no produce ninguna prueba de que lo fue. No hay semilla, ni log, ni marca de tiempo, ni comprobante: solo un nombre en tu pantalla, y «confía en mí» no es un argumento que gane.

Si hay premios de verdad y los participantes podrían impugnar el resultado:

Además, los sorteos con premio se regulan de forma distinta según dónde vivan tú y tus participantes, y según la plataforma en la que lo estés haciendo. Ese es un problema aparte de la aleatoriedad, y ningún selector de ningún tipo lo resuelve.

Para un sorteo común —una rotación de equipo, el regalo de un libro, decidir quién presenta primero—, el selector aleatorio de aquí alcanza: pega la lista, elige uno o varios, o divide todo en equipos. Corre en tu pestaña con una mezcla Fisher-Yates sobre la aleatoriedad criptográfica del navegador, y la lista nunca sale de tu computadora, que es también la razón por la que no puede darte un comprobante.

La mayor parte del trabajo está en la lista y no en el sorteo. Ordenarla alfabéticamente primero es la forma más rápida de ver a la misma persona dos veces antes de que la vea el sorteo, y ordenar una lista sin que las mayúsculas salten arriba es más engorroso de lo que suena, que es la otra mitad de conseguir una lista limpia.

Preguntas frecuentes

¿Cómo elijo un ganador al azar de una lista de nombres?

Pon un nombre por línea, quita los duplicados y las participaciones que no cumplan los requisitos, después mezcla la lista entera una vez y toma el primer resultado. Hacerlo en un selector que corre en el navegador lleva menos de un minuto y evita la tentación de volver a sortear. Anuncia al ganador junto con el número de participaciones, para que se vea el tamaño del sorteo.

¿Los selectores de nombres al azar en línea son realmente justos?

Depende de cómo mezclen. Una lista ordenada con un comparador aleatorio —el truco común de una sola línea— no es uniforme, y las entradas tienden a terminar cerca de donde empezaron. Un selector que usa una mezcla Fisher-Yates sobre crypto.getRandomValues() es genuinamente parejo, pero ninguna herramienta del navegador puede demostrarle a un tercero que el sorteo ocurrió como se cuenta.

¿Cómo elijo varios ganadores sin que la misma persona gane dos veces?

Pídelos todos en un solo sorteo en lugar de sortear varias veces. Un único sorteo de tres ganadores devuelve tres líneas distintas, así que la única forma de que una persona se lleve dos lugares es que su nombre esté dos veces en la lista. Para sortearlos en orden de primer, segundo y tercer premio, saca a cada ganador de la lista antes de la ronda siguiente.

¿Puedo darle a algunos participantes más chances de ganar?

Sí, poniéndolos más de una vez: diez participaciones extra son diez líneas idénticas. Asegúrate de desactivar antes cualquier filtro de duplicados, o esas líneas se colapsan en una sola. El selector de este sitio no tiene ningún campo de ponderación más allá de eso, y de todos modos una lista que puedes contar a mano es más fácil de defender.

¿Cómo demuestro que el sorteo de un premio no estuvo arreglado?

Comprométete con las reglas y con la lista de participantes antes de sortear: publica la lista, o publica un hash de ella si los nombres son privados, para poder mostrar después que nada cambió. Graba la pantalla mientras sorteas. Para premios lo bastante grandes como para ser impugnados, usa un servicio que guarde las participaciones y el resultado, porque una herramienta que por diseño mantiene tu lista local no puede producir pruebas.

¿Que el mismo nombre salga dos veces significa que el selector está roto?

No. Los sorteos separados son independientes, así que con veinte participaciones hay una probabilidad de uno entre veinte de repetir cada vez. Un generador que evitara repetirse sería el sesgado. Si necesitas que repetir sea imposible, haz un solo sorteo de varios ganadores o borra a cada ganador de la lista a medida que sale.

Última actualización 19 de septiembre de 2026