ToolActToolAct

Outil de Sélection Aléatoire

Outil de sélection aléatoire équitable pour tirages, sélections et choix

Paramètres du Tirage
Autoriser les Doublons
Si activé, la même option peut être sélectionnée plusieurs fois
Total des Options: 0
Sélectionnés: 0
Restants: 0
?

Qu'est-ce qu'un Outil de Sélection Aléatoire ?

Un sélecteur aléatoire choisit un élément dans une liste sans qu’une personne décide manuellement. Il sert pour la participation en classe, l’ordre de passage en réunion, les petits tirages, la répartition de tâches, le choix du repas, les activités d’équipe et toute situation où une décision neutre visible limite les biais. Cette page accepte une liste ligne par ligne, peut animer le tirage, conserver un historique local et éviter les répétitions en retirant les éléments déjà choisis. Le hasard peut rendre le choix statistiquement équitable, mais il ne vérifie pas les identités, ne détecte pas automatiquement les doublons et ne fournit pas de preuve d’audit. Pour un tirage officiel, l’éligibilité ou la remise de prix, utilisez une procédure documentée.

Mode d'emploi

Étapes d'utilisation

  1. Saisissez les options dans la zone de texte, une par ligne
  2. Indiquez le nombre d'éléments à sélectionner
  3. Choisissez si les doublons sont autorisés
  4. Cliquez sur « Lancer le tirage »
  5. Consultez les résultats sur la partie droite

Conseils pour un tirage équitable

  • Mettez un candidat par ligne et retirez les lignes vides ou doublons accidentels, sauf si les doublons sont autorisés volontairement.
  • Pour les tirages publics, décidez à l'avance de la graine, de la règle sur les doublons et de la règle de re-tirage pour faciliter l'explication du résultat.

Cas d’utilisation

Tirer des noms ou des éléments à partir d’une liste colléeSaisissez un élément par ligne et lancez une animation de tirage roulant qui utilise la randomité cryptographique du navigateur pour sélectionner le résultat final. Le dernier choix est mis en évidence, tandis que chaque élément tiré est enregistré dans l’ordre. Chaque tirage appelle crypto.getRandomValues() sur la plage entière [0, n) de sorte que chaque nom restant a exactement une chance sur n et l’index choisi est fixé avant le début de l’animation.
Lancer des sélections avec ou sans répétitionBasculez la possibilité de sélectionner un élément plusieurs fois. En mode sans répétition, les éléments tirés sont retirés du pool disponible et le compte restant s’affiche, utile pour les tombolas, les tours de classe, les tâches ménagères et les affectations d’équipe. Les deux modes ont des propriétés d’équité différentes : le mode sans répétition garantit la couverture, tandis que le mode répétition maintient une probabilité égale à chaque tirage et peut légitimement choisir le même nom deux fois de suite.
Conserver l’état du sélecteur entre les actualisationsLa liste d’entrée et les enregistrements de tirage sont sauvegardés dans localStorage, une session peut donc survivre à une actualisation accidentelle. Les résultats peuvent être copiés sous forme de liste ordonnée ou effacés séparément de la liste source lorsqu’un nouveau tour commence. Utilisez le bouton dédié Effacer les enregistrements pour supprimer l’historique d’un événement tout en conservant la liste de candidats, car les deux sont stockés sous des clés différentes.
Gérer des tours de classe ordonnés avec le compteurPassez en mode sans répétition et consultez l’historique de tirage pour savoir quel étudiant a déjà répondu, afin que le prochain tirage désigne toujours quelqu’un qui ne s’est pas encore exprimé. Le compte restant sous le résultat permet de voir facilement quand le tour touche à sa fin et laisse l’enseignant cadencer les dernières questions. Revenez en mode répétition pour les exercices d’échauffement à tirage rapide où la répétition n’est pas un problème.
Exporter une liste de gagnants vérifiable pour les petites tombolasCopiez l’historique de tirage sous forme de liste ordonnée pour qu’un petit cadeau d’équipe dispose d’une trace horodatée de chaque tir. Ajoutez la liste source, les règles de tirage et une capture d’écran de l’écran de tirage, car localStorage est propre au navigateur et à l’appareil et ne constitue pas un système d’enregistrement durable. Pour les tombolas payantes, les tirages réglementés ou les événements sensibles à la conformité, effectuez le tirage dans un système conçu pour l’audit et les témoins.

Principe technique

Le sélecteur aléatoire repose sur l'API Web Crypto (W3C, WHATWG), plus précisément crypto.getRandomValues(typedArray), qui est la seule source de nombres aléatoires cryptographiquement sécurisée exposée dans les navigateurs. En coulisses, le navigateur appelle le CSPRNG du système d'exploitation : CryptGenRandom sur Windows (AES-256 en mode CTR-DRBG depuis Windows 10), getrandom(2) sur Linux (qui lit depuis le même pool basé sur ChaCha20 alimentant le /dev/urandom du noyau), SecRandomCopyBytes sur macOS, et l'équivalent sur iOS, Android et BSD. La sortie convient pour la génération de clés, les nonces, les sels, les IV et tout endroit où la prévisibilité poserait un problème de sécurité. La distinction « niveau cryptographique » est importante. Math.random() dans V8 utilise xorshift128+ (un algorithme rapide à faible entropie) et renvoie un flottant 64 bits dans [0, 1) ; un acteur malveillant observant quelques sorties peut en principe reconstituer l'état de 128 bits et prédire chaque valeur future. Il en va de même pour SpiderMonkey et JavaScriptCore. Cela rend Math.random() inadapté à toute utilisation où le résultat doit être imprévisible — sélection équitable d'un gagnant, un jeton, un mot de passe à usage unique, une donne dans un jeu de cartes, un échantillon d'audit. crypto.getRandomValues(typedArray) est le seul choix pour ces cas. La conversion d'entiers 32 bits uniformes en un index uniforme dans [0, N) sans biais de modulo est le second détail technique qui distingue une implémentation correcte d'une implémentation défaillante. La formule naïve idx = randomUint32 % N est incorrecte : si N ne divise pas 2^32, les 2^32 mod N premières valeurs sont légèrement plus probables. L'algorithme correct est l'échantillonnage par rejet : calculer limit = 2^32 - (2^32 mod N) ; tirer une valeur 32 bits r ; si r >= limit, retirer ; sinon renvoyer r % N. Le biais passe de O(N / 2^32) à zéro. Pour N = 2 ou N puissance de 2, le modulo est exact, mais l'échantillonnage par rejet est le choix sûr par défaut et ne coûte au maximum qu'un retraitement en moyenne (et se termine toujours). Le sélecteur stocke les résultats dans localStorage avec une clé versionnée, de sorte qu'une session peut survivre au rechargement de la page et qu'un utilisateur peut consulter l'historique des tirages. L'historique n'est ni chiffré ni signé — il est local, non sensible et facile à effacer. Pour le mode sans répétition, l'algorithme tire sans remise en utilisant un mélange partiel de Fisher-Yates : à l'étape k sur N, on échange l'élément k avec un élément choisi uniformément dans [k, N) et on verrouille l'élément k comme tiré. Cela donne une complexité O(N) en temps, O(1) en espace supplémentaire, et garantit une probabilité égale pour chaque permutation, ce qui constitue la bonne garantie combinatoire. (L'approche naïve « tirer N fois en rejetant les répétitions » est aussi correcte mais en O(N²) et peut stagner sur de longues sessions.) Pour les sélections pondérées (chaque option a sa propre probabilité), l'algorithme standard est l'échantillonnage par inverse de la fonction de répartition (CDF inverse) avec un tableau de sommes préfixées : on construit une somme préfixée des poids, on tire un réel uniforme dans [0, total) et on recherche binairement le plus petit i tel que prefix[i] >= u. Cela donne O(log N) par tirage, et la somme préfixée n'est construite qu'une fois par modification. La méthode d'alias (Walker-Vose) donne O(1) par tirage au prix d'une construction en O(N), ce qui n'est rentable que lorsque N est grand et la distribution fixe.

  • Source d'aléa : crypto.getRandomValues(typedArray) — le seul RNG cryptographiquement sécurisé dans les navigateurs, soutenu par le CSPRNG du système (AES-256 CTR-DRBG sur Windows 10+, ChaCha20 sur Linux/macOS/iOS/Android).
  • Math.random() est xorshift128+ sur V8 (et variantes sur les autres moteurs) : rapide mais prévisible. Ne jamais l'utiliser pour une sélection équitable, des jetons, des OTP ou des échantillons d'audit — uniquement pour du bruit visuel, des animations ou de l'échantillonnage non sécurisé.
  • Mapping d'index sans biais : échantillonnage par rejet, pas modulo. Calculer limit = 2^32 - (2^32 mod N) ; si le uint32 aléatoire >= limit, retirer ; sinon renvoyer r % N. Évite le classique « biais de modulo » où les index de faible plage apparaissent plus souvent.
  • Les tirages sans répétition utilisent le mélange partiel de Fisher-Yates en O(N) temps, O(1) espace : à l'étape k, échanger l'élément k avec un élément uniforme dans [k, N), puis verrouiller k. Chaque permutation est équiprobable.
  • Les sélections pondérées utilisent l'échantillonnage par CDF inverse : construire une somme préfixée des poids une fois, tirer un réel uniforme dans [0, total), rechercher binairement le plus petit prefix[i] >= u. O(log N) par tirage.
  • L'historique des tirages est persisté dans localStorage avec une clé versionnée, de sorte qu'une session survit au rechargement de la page. L'historique est local uniquement et non sensible en termes de sécurité — effacez-le depuis l'interface une fois terminé.
  • Fisher-Yates vs « tirer N fois avec rejet » : les deux sont corrects en termes de distribution, mais Fisher-Yates est O(N) au total et O(1) en mémoire, tandis que le rejet naïf est O(N²) dans le pire cas (beaucoup de répétitions vers la fin d'une longue liste).
  • Plage de sortie et types : getRandomValues accepte Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array — et la page utilise toujours Uint32Array pour alimenter l'étape de mapping d'index.

Exemples

Tirage sans répétition dans une liste de candidats

Liste d'entrée (un par ligne) :
  Alice
  Bob
  Charlie
  David
  Eve
  Frank

Autoriser les doublons : OFF    Tirages : 3
Résultat :
  #1 : Charlie
  #2 : Alice
  #3 : Frank
  (Bob, David, Eve restent dans le pool)

La page appelle crypto.getRandomValues() sur un Uint32Array pour générer
un entier uniforme dans [0, n) à chaque tirage, où n est le nombre de
candidats restants. Chaque nom a la même probabilité 1/n à chaque tirage,
et l'index choisi est fixé avant le début de l'animation.

Tirage avec doublons et historique horodaté

Liste d'entrée (un par ligne) :
  Head
  Tails

Autoriser les doublons : ON    Tirages : 5
Résultat :
  #1 (14:23:01) : Head
  #2 (14:23:01) : Tails
  #3 (14:23:01) : Head
  #4 (14:23:01) : Head
  #5 (14:23:01) : Tails

En mode avec doublons, la même entrée peut être tirée plusieurs fois de suite,
et le pool ne diminue jamais. L'horodatage du tirage est ajouté à chaque
enregistrement afin que la même liste de candidats puisse être réutilisée
entre les manches tandis que l'historique indique précisément quand chaque
tirage a eu lieu. L'effacement des enregistrements est indépendant de la
liste de candidats — ils sont stockés sous des clés localStorage différentes.

Extrait JavaScript pour la sélection sous-jacente

// Tire un index dans [0, n) avec Web Crypto (CSPRNG)
function pickIndex(n) {
  // crypto.getRandomValues fournit une valeur uniforme sur 32 bits ; le modulo n
  // est sûr ici car n vaut au plus quelques milliers pour un tirage de liste,
  // et le biais du modulo est négligeable (2^32 / n est grand).
  const buf = new Uint32Array(1);
  crypto.getRandomValues(buf);
  return buf[0] % n;
}

// pickIndex(6) -> par ex. 4   (Charlie dans l'exemple ci-dessus)
// pickIndex(2) -> 0 ou 1      (Head ou Tails)
//
// Note : pour des pools énormes où n approche 2^32, utilisez l'échantillonnage
// par rejet pour éliminer le biais du modulo, par exemple :
//   const limit = Math.floor(0xFFFFFFFF / n) * n;
//   let r; do { crypto.getRandomValues(buf); r = buf[0]; } while (r >= limit);

Vérification d'équité sur 1 000 tirages

Liste :   ['A', 'B', 'C', 'D']    (4 entrées, part attendue 25,0 %)
Tirages : 1 000    Autoriser les doublons : ON
Observé :
  A : 247    (24,7 %)
  B : 256    (25,6 %)
  C : 248    (24,8 %)
  D : 249    (24,9 %)

Un tirage de 1 000 itérations avec crypto.getRandomValues doit rester dans une
fourchette d'environ +/- 3 points de pourcentage par rapport à la part attendue
sur chaque entrée ; des écarts plus importants (par ex. une entrée à 35 %)
indiquent généralement que l'implémentation appelle Math.random() ou applique
mal le modulo. Pour une tombola encadrée, conservez la liste source, la source
de l'entropie (navigateur/OS), l'horodatage du tirage et une signature de témoin
— localStorage n'est pas un système d'enregistrement durable.

FAQ

Le tirage est-il vraiment aléatoire ?

Oui. La sélection utilise crypto.getRandomValues de la Web Crypto API, qui est cryptographiquement robuste. Chaque option a une probabilité égale, sauf si vous configurez des pondérations.

La même option peut-elle être tirée deux fois de suite ?

Oui — c'est ainsi que fonctionne une sélection aléatoire indépendante. Avec 5 options, la probabilité d'obtenir deux fois le même résultat consécutivement est de 1/5 = 20 %. Si vous ne voulez pas de répétition, activez « retirer après sélection » qui effectue un tirage sans remise jusqu'à ce que la liste soit vide.

Comment fonctionne le tirage de N éléments ?

Par défaut, le tirage se fait sans remise — chaque élément peut être sélectionné au maximum une fois par tirage de N éléments. Activez « avec remise » si les doublons sont acceptables (par exemple, attribuer N tâches à une seule personne). N ne peut pas dépasser la taille de la liste en mode sans remise.

Puis-je ajouter des pondérations pour biaiser les tirages ?

Certaines versions prennent en charge des pondérations par option (par exemple, option A pondération 3, option B pondération 1 — A est 3 fois plus probable). La page normalise les pondérations en probabilités. Sans pondération, chaque option a une probabilité égale.

Pourquoi est-ce plus équitable qu'un tirage « à l'instinct » ?

Les humains sont mauvais en aléatoire — nous avons tendance à éviter les choix récents, à sur-choisir les options saillantes et à favoriser inconsciemment les noms que nous reconnaissons. Un tirage par ordinateur élimine ce biais, ce qui rend les décisions de type tombola plus claires pour les participants.

Ma liste est-elle enregistrée ?

Certaines versions enregistrent dans localStorage afin que la liste persiste dans le même navigateur. Fermer l'onglet ou changer de navigateur la fait disparaître, sauf si vous l'avez exportée. Rien n'est téléversé.

Puis-je l'utiliser pour des loteries légales ?

Non. Les tombolas, loteries et tirages de jeux d'argent légaux nécessitent des procédures aléatoires auditables, souvent du matériel RNG physique ou certifié. Un outil web généraliste n'est ni documenté ni audité — utilisez-le uniquement pour les tombolas de bureau et les tirages informels.