OTROS

Ruleta de sorteo: qué prueba y qué no un sorteador

Por Jorge Chang, el

Ruleta de sorteo: qué prueba y qué no un sorteador

Síguenos en:

Ruleta de sorteo y sorteador aleatorio online: cómo funcionan por dentro, qué es una semilla y qué hace falta para que el resultado sea verificable.

Qué pasa realmente cuando le das a girar

Un sorteador online hace tres cosas en orden. Convierte tu lista en un arreglo indexado: n elementos, posiciones 0 a n-1. Pide un número al generador de aleatoriedad y lo transforma en un índice dentro de ese rango. Calcula cuántos grados debe rotar la rueda para que el sector de ese índice quede bajo el puntero, y anima la rotación.

El orden importa. La animación es consecuencia del resultado, no su causa. La rueda no descubre al ganador mientras gira: recibe el índice ya elegido y se mueve hasta ahí. El giro, la desaceleración y el rebote final son diseño de interfaz, y se cambian sin tocar la lógica de selección. No es una crítica al formato: es lo que hay que entender antes de decidir qué prueba un video.

El generador pseudoaleatorio y la semilla

Un ordenador no produce azar. Produce una secuencia determinista que lo parece, con un generador pseudoaleatorio (PRNG): una función que guarda un estado interno y, cada vez que la llamas, lo transforma y devuelve un número derivado de él. El valor inicial de ese estado es la semilla.

De ahí sale la propiedad que define todo lo demás: misma semilla, misma secuencia. Le das la misma semilla y la misma lista, y sale el mismo ganador, hoy y dentro de un año, en tu máquina y en la de cualquiera. Eso, que suena a defecto, es lo que hace verificable un sorteo.

En un navegador hay dos fuentes y la diferencia es grande. Math.random() usa en el motor V8 un algoritmo de la familia xorshift128+, con 128 bits de estado. Es rápido y estadísticamente decente, con dos límites: no es criptográficamente seguro —observando suficientes salidas se puede reconstruir el estado y predecir las siguientes— y su semilla no es accesible ni fijable desde el código de la página, así que no puedes anunciarla antes ni republicarla después. La otra fuente es crypto.getRandomValues(), que toma entropía del sistema operativo: impredecible de verdad y, por lo mismo, irreproducible.

La consecuencia es incómoda y casi nadie la dice: las dos opciones por defecto del navegador son inauditables, una porque no puedes conocer la semilla y la otra porque no existe. Un sorteo verificable necesita un PRNG con semilla explícita, elegida y publicada por ti.

Los tres errores técnicos que sí sesgan un sorteo

El sesgo de módulo. Para convertir un entero aleatorio de 32 bits en un número del 0 al 99, lo intuitivo es tomar el resto: valor % 100. El problema es que 2³² no es múltiplo de 100: sobran 96 unidades, así que 96 de los 100 resultados posibles pueden salir una vez más que los otros cuatro. Aquí el desvío es de una parte en unos 43 millones, irrelevante para una rifa, y crece cuando el rango es grande respecto de la fuente. Se elimina descartando el valor cuando cae en la franja sobrante y volviendo a pedir.

Barajar con una comparación aleatoria. El atajo clásico para desordenar una lista es ordenarla con un comparador que devuelve azar, del tipo sort(() => Math.random() - 0.5). No produce un orden uniforme: el resultado depende del algoritmo de ordenamiento del motor y de la posición inicial de cada elemento, y algunos terminan con más probabilidad de quedar cerca de donde empezaron. El método correcto es Fisher-Yates: se recorre la lista desde el final, se elige un índice aleatorio entre 0 y la posición actual, y se intercambian. Cada permutación queda con la misma probabilidad.

El espacio de estados. Un PRNG con 128 bits de estado produce como máximo 2¹²⁸ secuencias distintas, unas 3,4 × 10³⁸. Los órdenes posibles de una lista de 34 elementos, 34 factorial, son 2,95 × 10³⁸ y todavía caben; los de 35 elementos son 1,03 × 10⁴⁰ y ya no. A partir de 35 participantes, la mayoría de los órdenes son inalcanzables para ese generador. Para elegir un solo ganador no produce un sesgo perceptible contra nadie, así que no es una alarma: es el límite de lo que un sorteador de navegador puede afirmar sobre sí mismo.

Por qué una ruleta bonita no prueba nada por sí sola

El resultado se calcula en el navegador del organizador, con código que él ejecuta cuando quiere y las veces que quiere. Volver a girar no cuesta nada y no deja rastro. Esa es la objeción completa: no hay ningún costo asociado a repetir hasta que salga el nombre conveniente. La grabación no lo resuelve, porque no distingue el primer giro del séptimo, y un video que empieza con la rueda ya cargada tampoco demuestra qué lista había dentro ni cuándo se cerró.

Hay dos huecos más que se ven poco. El sorteador no valida la lista: si un participante aparece dos veces por un error de tipeo, tiene el doble de probabilidad y la rueda no lo sabe. Y el peso de las participaciones múltiples: quien compró tres boletos debe aparecer tres veces, y si el sorteador reparte por nombre en vez de por boleto, acabas de anular la ventaja que ese participante pagó.

Qué hace que un sorteo sea verificable de verdad

Verificable significa que un tercero que no confía en ti llega solo al mismo resultado. Hay cuatro caminos y el más fuerte es el primero.

  1. Semilla anunciada antes. Publicas, antes de cerrar ventas, qué generador usarás, qué semilla y en qué orden estará la lista. Después publicas la lista final y cualquiera reejecuta y obtiene el mismo ganador. La variante más limpia es el compromiso previo: publicas un hash —SHA-256, por ejemplo— de la semilla y de la lista antes del cierre, y revelas ambas después. El hash no deja ver el contenido, pero impide cambiarlo: cualquier modificación posterior daría un hash distinto.
  2. Una fuente externa posterior al cierre. El caso peruano es la Tinka: se fija por escrito, antes del primer boleto, qué sorteo se leerá, qué cifras y en qué orden, con un ejemplo resuelto en las bases. El organizador no puede influir en un resultado que publica otro.
  3. Testigo independiente con grabación continua. Sirve si el video es de una sola toma, sin cortes, muestra la lista completa y el total de participantes antes de girar, y el testigo no tiene relación con el organizador. Es el más frágil de los tres porque descansa en una persona.
  4. La lista congelada. No es un método de sorteo, es el requisito de los tres anteriores: publica la hora de cierre y el total de participaciones antes de conocer el resultado. Si la lista puede moverse después, el mecanismo más elegante no prueba nada.

Cuándo la ruleta es la herramienta correcta

Para un sorteo pequeño entre gente que se conoce —un premio interno, un ganador entre comentarios, un desempate— la ruleta es perfecta: el costo de una duda es bajo y el formato se entiende sin explicación.

Para una rifa con dinero de por medio, la ruleta es la capa visible de un procedimiento que tiene que existir debajo: bases publicadas, lista congelada a una hora conocida, participaciones ponderadas por boleto y semilla o referencia externa anunciada antes. Con eso, girar en vivo es una buena forma de comunicar el resultado. Sin eso, es una animación.

Despega con nosotros

Solicita un diagnóstico gratuito y descubre el potencial de tus ideas

Entradas Relacionadas

Plataformas virtuales: cuál elegir para tu negocio

Plataformas virtuales: cuál elegir para tu negocio

DESAROLLO WEB
CRM: ejemplos prácticos para tu negocio

CRM: ejemplos prácticos para tu negocio

MARKETING
Seguimiento de pedidos: por qué tenerlo en tu web

Seguimiento de pedidos: por qué tenerlo en tu web

DESAROLLO WEB