Cómo elegir ganadores de un sorteo de forma justa y demostrarlo
Para elegir un ganador de forma justa, usa un generador pensado para la seguridad, da a cada participante la misma probabilidad y deja que la gente compruebe el resultado después. La mayoría de las injusticias en un selector sencillo vienen de una de estas dos causas: una fuente de aleatoriedad débil, o un pequeño error aritmético llamado sesgo del módulo. Ambas tienen solución. Una lista pública de participantes y un registro del sorteo son la mejor prueba de que nadie eligió al ganador.
Selector aleatorioElegir un ganador con justiciaÚsalo gratisAleatorio verdadero y pseudoaleatorio
Una fuente aleatoria verdadera toma su impredecibilidad de un proceso físico, como el ruido electrónico. Un generador pseudoaleatorio es una fórmula. Parte de una semilla, aplica pasos deterministas y produce una secuencia que parece aleatoria. La secuencia depende por completo de la semilla, así que quien conozca la semilla y la fórmula puede predecir cada número.
La mayoría del software usa generadores pseudoaleatorios, y eso está bien para mezclar una lista de reproducción o aleatorizar un nivel de un juego. En un sorteo en el que la gente tiene algo que ganar, lo que importa es si alguien podría predecir o influir en el resultado. Un generador rápido pero predecible es la herramienta equivocada.
Usa el generador criptográfico del navegador
En JavaScript, Math.random() es un generador pseudoaleatorio rápido. Su documentación dice que no es adecuado para criptografía, y un sorteo de premios es una decisión sensible desde el punto de vista de la seguridad. La función crypto.getRandomValues() de Web Crypto rellena una matriz con valores de la fuente criptográfica aleatoria del sistema operativo. Esa es la que debes usar. El selector aleatorio la usa en cada elección, incluidas las tiradas de moneda y de dados. Un selector que no dice qué utiliza es más difícil de creer, así que pregunta antes de confiar en él.
El sesgo del módulo, con un ejemplo
Supongamos que tu fuente da un byte aleatorio, un número entero de 0 a 255, y quieres elegir una de tres opciones. La ruta fácil es quedarse con el resto de dividir entre 3. Parece justo, pero 256 no se reparte en grupos de tres de forma exacta.
- Los valores 0, 3, 6 y así hasta 255 dan resto 0. Son 86.
- Los valores con resto 1 son 85, y los valores con resto 2 también son 85.
Así, la entrada 0 sale 86 veces de 256, cerca del 33,6 %, mientras que las entradas 1 y 2 salen 85 veces cada una, cerca del 33,2 %. La diferencia es pequeña, pero es real, y crece a medida que el número de entradas se vuelve grande en comparación con el rango de la fuente.
La solución es el muestreo por rechazo. Sacas un valor y, si cae en la parte sobrante que no se reparte bien, vuelves a sacar otro. En el ejemplo del byte, descartas el 255 y aceptas solo los valores de 0 a 254, que sí se reparten en grupos de tres. Con un número aleatorio de 32 bits, el sobrante es de aproximadamente un valor entre 4.300 millones, así que el sesgo es despreciable para un sorteo. Aun así, un selector cuidadoso lo tiene en cuenta, porque el mismo error empeora a medida que el rango se reduce.
Sorteos sin repetición
Si necesitas varios ganadores, sacar un índice aleatorio tres veces puede elegir dos veces la misma entrada. Hay dos métodos limpios para evitarlo:
- Quita a cada ganador de la lista y vuelve a sortear entre el resto.
- Baraja toda la lista una vez con el método de Fisher–Yates y toma a los ganadores desde arriba.
Fisher–Yates recorre la lista desde el final, intercambia cada posición con una posición elegida al azar entre esa y el principio, y genera todos los órdenes posibles con la misma probabilidad cuando las elecciones aleatorias son justas. Es breve, bien conocido y fácil de explicar a los participantes. Las opciones Quitar ganadores y Sin repetidos del selector cubren ambos métodos.
Haz que el sorteo se pueda comprobar
Un sorteo justo es aquel que cualquiera puede verificar. Antes del sorteo:
- Publica las participaciones como una lista numerada, junto con las normas sobre quién podía participar.
- Publica una huella SHA-256 de esa lista. Cualquier herramienta SHA-256 puede generarla, como el generador de hash. Una huella cambia por completo si se modifica una sola entrada, así que la lista no puede editarse en secreto después. La misma comprobación sirve para las descargas; cómo verificar la suma de comprobación SHA-256 de una descarga explica los pasos.
Durante y después del sorteo:
- Graba la pantalla desde el momento en que inicias el selector hasta que aparece el resultado.
- Publica la lista final con el número ganador, para que la gente pueda recalcular la huella y confirmar que nada cambió.
- Explica cómo se eligió al ganador, por ejemplo: «elegido con un selector en el navegador que usa la fuente criptográfica aleatoria del sistema operativo».
Las normas de los sorteos varían según la plataforma, y los sorteos de premios pueden tener requisitos legales que dependen de dónde vivas. Revisa las normas de promoción de la plataforma y la legislación de tu país antes de hacer uno. Esta es una guía general, no asesoramiento jurídico. Cuando estés listo, elige un ganador con el selector aleatorio.
Cómo hacerlo con fixmint
- Elige Nombres y pega las participaciones en Nombres, uno por línea.
- Pon en Ganadores el número de premios. Marca Quitar ganadores de la lista para que nadie pueda ganar dos veces.
- Para un sorteo numerado, elige Número, ajusta Mínimo y Máximo, y marca Sin repetidos si cada número solo puede ganar una vez.
- Pulsa Elegir ganadores con la grabación de pantalla ya en marcha desde el inicio.
- Publica las participaciones numeradas, la huella SHA-256, la participación ganadora y cómo se usó el selector.
Respuestas rápidas
¿Sirve Math.random() para un sorteo?
Sirve para juegos y barajados, pero no para un sorteo que la gente vaya a comprobar, porque su resultado puede predecirse. Usa una fuente criptográfica.
¿Por qué no tomar un número aleatorio módulo el número de participaciones?
Cuando el rango no se reparte de forma exacta, el resto queda desigual y algunas entradas tienen una probabilidad ligeramente mayor. El muestreo por rechazo elimina ese sesgo.
¿Puedo elegir varios ganadores en un mismo sorteo?
Sí. Quita a cada ganador antes de la siguiente elección, o baraja una vez y toma las primeras entradas. En cualquiera de los dos casos, ninguna entrada puede ganar dos veces.
Traducido del Original en inglés con ayuda de IA.
Comentarios
Aún no hay comentarios. Sé el primero.


