Tirage au sort pour jeu concours

Cet outil gratuit de tirage au sort désigne les gagnants et les suppléants de votre jeu concours à partir d'une liste de participants, d'un fichier CSV ou des commentaires copiés sous une publication Instagram. Le tirage se fait dans votre navigateur, sans compte et sans envoyer la liste. Chaque tirage affiche sa graine et l'empreinte SHA-256 de la liste, ce qui permet de le rejouer à l'identique, et vous repartez avec un procès-verbal en PDF. Ce document, établi par vous, ne remplace pas un constat de commissaire de justice.

La liste n'est envoyée ni à nos serveurs ni à un tiers : dans l'onglet Réseau de votre navigateur, vous verrez le chargement de la page et des mesures d'audience sans cookie, jamais le contenu de la liste.

Outil gratuit conçu par Gainstant, le studio de développement de jeux concours de l'agence CYBERFR, qui travaille en marque blanche pour les . Page mise à jour le .

1 · Participations

Participants fictifs pour tester l'outil sans aucune donnée personnelle.

2 · Règles
Doublons
Liste d'exclusion (facultatif)
3 · Gagnants et suppléants

Les suppléants remplacent, dans leur ordre, un gagnant qui ne réclame pas son lot ou ne remplit pas les conditions, si votre règlement le prévoit.

Nommer les lots (facultatif)

Votre règlement doit déjà prévoir le délai de réclamation et, si vous tirez des suppléants, leur ordre d'appel. Le jeu étant clos, n'y ajoutez pas de clause maintenant : appliquez le règlement publié, et préparez celle des suppléants pour la prochaine opération, le modèle du générateur ne la contenant pas :

4 · Tirage et documents

Récapitulatif

Participations retenues0

Ajoutez au moins une participation pour lancer le tirage.

Ce bouton vide seulement ce qui est affiché : l'outil n'enregistre rien dans votre navigateur.

Tout est calculé dans votre navigateur : la liste n'est envoyée ni à nos serveurs ni à un tiers. Fermer l'onglet efface tout.

Comment faire un tirage au sort pour un jeu concours

Le tirage au sort d'un jeu concours désigne au hasard, après la clôture, les gagnants parmi les participations valides, selon les règles fixées par le règlement du jeu. Avec cet outil, il se déroule en sept étapes :

  1. Relisez le règlement. Il fixe la date du tirage, le nombre de gagnants, les participations multiples admises ou non, les personnes exclues, le délai de réclamation et, s'il en prévoit, l'ordre des suppléants.
  2. Rassemblez les participations une fois le jeu clos : export du formulaire en CSV, colonne d'un tableur, bulletins saisis ou commentaires copiés sous la publication Instagram.
  3. Collez ou importez la liste dans l'outil, puis vérifiez l'aperçu.
  4. Appliquez les règles du jeu : une participation par personne ou une par ligne, et liste d'exclusion pour le compte organisateur, le personnel ou les prestataires.
  5. Contrôlez le récapitulatif (lignes lues, doublons retirés, exclusions, participations retenues) et indiquez le nombre de gagnants et de suppléants. Pour que la personne chargée du contrôle puisse constater, avec la liste retenue, que la liste n'a pas changé, affichez l'empreinte de la liste et publiez-la avant de lancer le tirage.
  6. Lancez le tirage : gagnants et suppléants s'affichent par rang, avec la graine et l'empreinte SHA-256 qui permettent de le rejouer.
  7. Téléchargez le procès-verbal et la liste retenue, contactez les gagnants, puis annoncez le résultat comme le prévoit votre règlement, par exemple avec le procès-verbal à publier, qui ne reprend aucun nom de participant.

Tirage au sort en ligne dans une liste de noms

Cet outil de tirage au sort en ligne sert au moment où votre jeu concours est clos : vous avez la liste de vos participants, sous forme de noms, de pseudos ou de numéros de participation, et devez désigner vos gagnants et vos suppléants. Tout le calcul se fait dans votre navigateur : la liste n'est envoyée ni à nos serveurs ni à un tiers, aucun compte n'est demandé et rien n'est conservé par l'outil à la fermeture de l'onglet.

Avant le tirage, l'outil prépare la liste : lignes vides ignorées, espaces superflus retirés, doublons repérés sans tenir compte des majuscules, du @ initial et, si vous le souhaitez, des accents. Vous appliquez la règle de votre règlement, une participation par personne ou une par ligne, et une liste d'exclusion écarte le compte organisateur, le personnel ou les prestataires. Chaque participation retenue a ensuite la même probabilité d'être tirée.

Tirage au sort d'un jeu concours Instagram

L'outil ne se connecte pas à Instagram, dont les interdisent de collecter des informations de manière automatisée sans autorisation expresse. Pour un tirage au sort parmi les commentaires Instagram, ouvrez la publication sur ordinateur, affichez tous les commentaires, copiez-les et collez-les dans l'onglet « Commentaires Instagram ». L'outil repère les auteurs ou les comptes mentionnés, écarte votre compte et vous laisse décocher ce qui n'est pas un participant. Si les gagnants sont les auteurs des commentaires, comparez les participations détectées avec le nombre de commentaires de la publication : une copie peut omettre des commentaires non chargés. Pour un jeu concours sur Facebook ou un autre réseau, cet onglet n'est pas prévu : relevez les participants, un par ligne, et collez la liste dans l'onglet « Coller une liste ».

Si votre règlement demande d'identifier des amis, indiquez le nombre de mentions exigé, mais vérifiez la règle de chaque plateforme : les interdisent « identifiez vos amis dans cette publication pour participer », les visent l'identification inexacte. Sur les deux réseaux, l'organisateur est responsable de la légalité de sa promotion, qui doit inclure une décharge dûment remplie par chaque participant protégeant la plateforme, et une mention : sur Facebook, que la promotion n'est pas gérée ou parrainée par Facebook ; sur Instagram, qu'elle n'est ni sponsorisée, ni soutenue, ni gérée par Instagram, ni associée à Instagram. Aucune des deux plateformes n'indique à quel moment ces éléments doivent figurer : en pratique, la décharge se prévoit au règlement, avant la participation. Pages consultées le 15 septembre 2026.

Tirage au sort depuis Excel ou Google Sheets

Copiez la colonne des participants et collez-la dans l'onglet « Coller une liste » : si vous copiez plusieurs colonnes, vous cochez celles à utiliser. Vous pouvez aussi enregistrer le fichier en CSV (dans Excel : Fichier, Enregistrer sous, CSV UTF-8) et l'importer. Les autres colonnes, comme les e-mails ou les téléphones, ne sont reprises ni dans le résultat ni dans les documents, et chaque gagnant est accompagné du numéro de sa ligne dans le collage ou le fichier, pour retrouver ses coordonnées dans votre export (le numéro correspond à la ligne du tableur si la copie commence à la première ligne).

La fonction ALEA.ENTRE.BORNES permet aussi de tirer au sort dans Excel, mais qu'un nouveau nombre aléatoire est renvoyé chaque fois que la feuille de calcul est calculée : le résultat change à la moindre saisie et la formule ne permet pas de retrouver un tirage passé.

Rejouer et vérifier un tirage

L'empreinte SHA-256 de la liste retenue, une suite de 64 caractères, change dès qu'une participation est ajoutée, retirée ou modifiée. La graine est une valeur de 32 octets tirée au lancement. L'algorithme public gainstant-tirage-v1 calcule le classement à partir des deux : même liste retenue et même graine donnent les mêmes gagnants, dans le même ordre. Ajouter un suppléant après coup ne change aucun rang déjà tiré.

Le bloc de vérification ne contient aucun nom. Transmettez-le avec la liste retenue à la personne chargée du contrôle, client ou commissaire de justice : le formulaire ci-dessous rejoue le tirage et répond « Identique » ou « Différent », et le script Python publié dessous fait le même calcul hors de gainstant.fr. Ne communiquez pas la liste nominative aux participants : publiez l'empreinte et le bloc.

Le rejeu établit que le résultat découle de cette liste et de cette graine. Il ne prouve ni que la liste est complète, ni que les exclusions sont justifiées, ni qu'un seul tirage a eu lieu : l'outil numérote les tirages de la session et les reporte au procès-verbal, mais un tirage fait dans un autre onglet y échappe. Publiée avant le tirage, l'empreinte permet au moins à la personne qui détient la liste retenue de constater que la liste n'a pas été retouchée ensuite.

L'algorithme gainstant-tirage-v1 en cinq étapes

  1. Chaque ligne est nettoyée (caractères invisibles retirés, espaces regroupés, forme Unicode NFC) et les lignes vides sont ignorées.
  2. Les exclusions sont retirées et, avec la règle « une participation par personne », les doublons sont regroupés sans tenir compte des majuscules, du @ initial et, en option, des accents. La liste retenue est ensuite triée dans un ordre fixe, qui ne dépend pas de l'ordre du collage.
  3. L'empreinte est le SHA-256 du nom de l'algorithme, du nombre de participations et de la liste triée, une participation par ligne.
  4. La graine de 32 octets, produite par crypto.getRandomValues, et l'empreinte alimentent une suite de blocs SHA-256 numérotés ; chaque bloc fournit huit entiers de 32 bits.
  5. Ces entiers mélangent la liste selon la méthode de Fisher-Yates, en rejetant les valeurs qui favoriseraient certaines positions : les premiers rangs sont les gagnants, les suivants les suppléants.

Vérifier un tirage

Collez une liste et un bloc pour vérifier un tirage.

Ce contrôle établit que le résultat découle de cette liste et de cette graine. Il ne prouve ni que la liste est complète, ni qu'un seul tirage a été effectué.

Script de vérification en Python

Bibliothèque standard uniquement. Enregistrez le script sous le nom verifier-tirage-v1.py, puis lancez la commande avec la liste retenue, la graine, le nombre de rangs (gagnants et suppléants) et les deux règles recopiées telles qu'elles figurent dans le bloc (doublons, puis accents) :

python3 verifier-tirage-v1.py liste-retenue.txt GRAINE 5 personne ignores
#!/usr/bin/env python3
# Rejoue un tirage au sort gainstant-tirage-v1, hors de gainstant.fr.
# Bibliotheque standard uniquement (Python 3.8 ou plus recent).
#
# Usage :
#   python3 verifier-tirage-v1.py liste-retenue.txt GRAINE NOMBRE_DE_RANGS personne|ligne ignores|distingues
#
# NOMBRE_DE_RANGS = gagnants + suppleants du bloc de verification.
# Les deux regles se recopient telles qu'ecrites dans le bloc (ignorer et distinguer sont aussi acceptes).
# Comparez ensuite l'empreinte et les positions affichees avec celles du bloc.

import hashlib
import re
import struct
import sys
import unicodedata

VERSION = "gainstant-tirage-v1"


def classe(codes, repetition):
    return re.compile("[" + "".join(re.escape(chr(c)) for c in codes) + "]" + repetition)


INVISIBLES = classe([*range(0, 9), *range(14, 32), *range(127, 133), *range(134, 160), 173, 8203, 8204, 8205, 8288, 65279], "+")
ESPACES = classe([9, 10, 11, 12, 13, 32, 133, 160, 5760, *range(8192, 8203), 8232, 8233, 8239, 8287, 12288], "+")
FINS_DE_LIGNE = classe([10, 13, 8232, 8233, 133], "")


def normaliser(ligne):
    ligne = INVISIBLES.sub("", ligne)
    ligne = ESPACES.sub(" ", ligne)
    ligne = ligne.strip(" ")
    return unicodedata.normalize("NFC", ligne)


def cle_de_personne(valeur, ignorer_accents):
    cle = valeur.lstrip("@").strip(" ").lower()
    if ignorer_accents:
        decompose = unicodedata.normalize("NFD", cle)
        cle = unicodedata.normalize("NFC", "".join(c for c in decompose if not unicodedata.category(c).startswith("M")))
    return cle


def ordre(valeur):
    return valeur.encode("utf-8")


def liste_retenue(texte, doublons, ignorer_accents):
    if texte.startswith(chr(65279)):
        texte = texte[1:]
    texte = texte.replace(chr(13) + chr(10), chr(10))
    valeurs = [v for v in (normaliser(l) for l in FINS_DE_LIGNE.split(texte)) if v]
    if doublons == "personne":
        gardees = {}
        for v in valeurs:
            cle = cle_de_personne(v, ignorer_accents)
            if cle not in gardees or ordre(v) < ordre(gardees[cle]):
                gardees[cle] = v
        valeurs = list(gardees.values())
    return sorted(valeurs, key=ordre)


def empreinte(valeurs):
    texte = VERSION + chr(10) + str(len(valeurs)) + chr(10) + chr(10).join(valeurs)
    return hashlib.sha256(texte.encode("utf-8")).digest()


def flux(graine, empreinte_liste):
    compteur = 0
    while True:
        message = VERSION.encode("utf-8") + bytes([0]) + graine + empreinte_liste + struct.pack(">I", compteur)
        compteur += 1
        yield from struct.unpack(">8I", hashlib.sha256(message).digest())


def uniforme(m, entiers):
    limite = 4294967296 - (4294967296 % m)
    while True:
        x = next(entiers)
        if x < limite:
            return x % m


def positions(n, k, graine, empreinte_liste):
    entiers = flux(graine, empreinte_liste)
    indices = list(range(n))
    for i in range(k):
        j = i + uniforme(n - i, entiers)
        indices[i], indices[j] = indices[j], indices[i]
    return indices[:k]


def main():
    if len(sys.argv) != 6:
        print("Usage : python3 verifier-tirage-v1.py liste-retenue.txt GRAINE NOMBRE_DE_RANGS personne|ligne ignores|distingues")
        sys.exit(2)
    chemin, graine_texte, rangs_texte, doublons, accents = sys.argv[1:]
    graine_hex = "".join(c for c in graine_texte.lower() if c in "0123456789abcdef")
    if len(graine_hex) != 64:
        print("La graine doit compter 64 caracteres hexadecimaux.")
        sys.exit(2)
    if doublons not in ("personne", "ligne") or accents not in ("ignores", "distingues", "ignorer", "distinguer") or not rangs_texte.isdigit():
        print("Arguments invalides : NOMBRE_DE_RANGS entier, personne ou ligne, ignores ou distingues.")
        sys.exit(2)
    if hasattr(sys.stdout, "reconfigure"):
        sys.stdout.reconfigure(encoding="utf-8")
    with open(chemin, encoding="utf-8", newline="") as fichier:
        texte = fichier.read()
    valeurs = liste_retenue(texte, doublons, accents in ("ignores", "ignorer"))
    empreinte_liste = empreinte(valeurs)
    rangs = int(rangs_texte)
    print("participations retenues : " + str(len(valeurs)))
    print("empreinte : " + empreinte_liste.hex())
    if rangs > len(valeurs):
        print("Le nombre de rangs depasse le nombre de participations retenues.")
        sys.exit(1)
    for rang, position in enumerate(positions(len(valeurs), rangs, bytes.fromhex(graine_hex), empreinte_liste), start=1):
        print("rang " + str(rang) + " - position " + str(position + 1) + " : " + valeurs[position])


if __name__ == "__main__":
    main()
Vecteur de test

Liste : Participant 001 à Participant 120, une par ligne. Doublons : une participation par personne, accents ignorés. Graine : 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f. 3 gagnants et 2 suppléants. Empreinte attendue : db45eea4842b2f2e5811ddd4ff07b7845ef88c126b976ad9819695889bd98ab7. Positions attendues : 40, 120, 118, 70, 64.

Logiciel de tirage au sort ou outil en ligne ?

Inutile d'installer un logiciel de tirage au sort : ce générateur en ligne s'ouvre dans un navigateur récent, sur ordinateur, tablette ou téléphone. Il est gratuit, sans inscription, et aucune fonction n'est réservée à une offre payante. Pour un tirage en réunion ou en direct sur les réseaux, le mode présentation affiche en plein écran la date, l'heure, l'empreinte et la graine, puis révèle les gagnants un par un sans faire défiler les autres noms. Sur téléphone, collez une liste ou importez un fichier ; pour copier des commentaires Instagram, l'ordinateur reste plus pratique.

Ce que devient votre liste de participants

Une liste de noms ou de pseudos contient des données personnelles, le RGPD visant expressément les identifiants en ligne, et l'organisateur qui décide du tirage et de ses moyens en est responsable. Ici, la liste n'est envoyée ni à nos serveurs ni à un tiers, n'est enregistrée ni dans un cookie ni dans le stockage du navigateur et n'apparaît jamais dans l'adresse de la page. Fermer l'onglet ou cliquer sur « Tout effacer » la retire de l'outil. L'onglet Réseau de votre navigateur permet de constater qu'aucune requête ne transporte la liste ; notre explique comment ouvrir ces outils.

Notre mesure d'audience sans cookie reçoit les pages vues et des événements d'usage, jamais un nom, un pseudo, une empreinte ou une graine. Les documents téléchargés restent sur votre poste : le procès-verbal complet et la liste retenue contiennent des noms, le procès-verbal à publier ne reprend aucun nom de participant. Les mentions d'information de votre formulaire se préparent avec notre .

Tirage sur liste ou jeu concours hébergé : deux besoins différents

Sur les , les résultats et les instants gagnants sont déterminés côté serveur et, selon le niveau retenu au brief, les attributions sont journalisées et horodatées ; le navigateur du participant n'affiche qu'une mise en scène du résultat. Cet outil répond à un autre besoin : l'organisateur tire au sort sur son propre poste, parmi une liste close, et aucun participant n'a accès au calcul.

Il convient pour clore un concours sur les réseaux sociaux, un jeu avec bulletins ou un formulaire exporté. Quand la dotation est importante ou le risque de contestation réel, faites constater le tirage par un commissaire de justice (anciennement huissier). Et quand le jeu doit lui-même collecter les participations, recueillir les consentements et désigner les gagnants, il faut un jeu hébergé, dont le règlement se prépare avec notre . Les agences de communication peuvent nous confier ce développement pour leurs clients : notre page sur le explique qui parle à qui, qui signe quoi et qui héberge.

Pour les agences de communication

Un jeu concours complet, de la collecte au tirage, pour un client ?

Quand le jeu est hébergé, la collecte des participations, les consentements et le tirage se font côté serveur, avec, selon le niveau retenu au brief, une journalisation horodatée des attributions. Nous développons ces jeux en marque blanche pour les clients de votre agence, avec l'engagement écrit de ne pas démarcher les clients que vous nous confiez.

Découvrir le studio pour les agences →

Questions fréquentes sur le tirage au sort d'un jeu concours

Est-il légal de faire un tirage au sort pour un jeu concours ?

Oui, dans un cadre précis. Un tirage au sort promotionnel organisé par un professionnel à l'égard des consommateurs est une loterie publicitaire. La DGCCRF rappelle que ces opérations ne sont pas concernées par l'interdiction des jeux d'argent et de hasard : l'article L320-6 du Code de la sécurité intérieure les met expressément à part, à son 7°, qui renvoie aux opérations publicitaires de l'article L121-20 du Code de la consommation. Elles relèvent exclusivement du Code de la consommation, dont l'article L121-20 les interdit lorsqu'elles sont déloyales au sens de l'article L121-1. La DGCCRF précise que la loterie publicitaire doit être gratuite : une obligation d'achat reste possible, à condition que l'achat porte uniquement sur le produit ou le service, et non sur l'accès au jeu (Cour d'appel de Paris, 14 février 2020, n° 17/20830). Ne faites donc jamais payer l'accès au jeu lui-même. Cet outil désigne les gagnants : il ne vérifie pas que votre opération respecte ces règles.

Ce tirage au sort remplace-t-il un constat de commissaire de justice (anciennement huissier) ?

Non. Le procès-verbal produit par l'outil est un document établi par l'organisateur. Les constatations purement matérielles d'un commissaire de justice, exclusives de tout avis sur leurs conséquences, font foi jusqu'à preuve contraire, sauf en matière pénale où elles ont valeur de simples renseignements (ordonnance n° 2016-728 du 2 juin 2016, article 1). Le document de l'organisateur reste un élément de preuve que le juge apprécie librement, la preuve pouvant être apportée par tout moyen hors les cas où la loi en dispose autrement (Code civil, article 1358). Pour une dotation importante ou une opération exposée à la contestation, faites constater le tirage par un commissaire de justice, profession issue de la fusion des huissiers de justice et des commissaires-priseurs judiciaires.

Faut-il déposer le règlement chez un commissaire de justice avant le tirage au sort ?

Non. L'obligation de déposer le règlement d'une loterie publicitaire auprès d'un officier ministériel a été supprimée par la loi n° 2014-1545 du 20 décembre 2014 (article 54), à compter du 22 décembre 2014. Le dépôt reste possible. Le règlement reste indispensable en pratique : c'est lui qui fixe la date du tirage, le nombre de gagnants, le délai de réclamation et le sort des lots non attribués.

Quel logiciel de tirage au sort choisir pour un jeu concours ?

Tout dépend de votre source. Un service qui lit lui-même les commentaires d'une publication demande l'adresse de la publication ou la connexion de votre compte, et accède alors aux commentaires et aux pseudos. Si vous avez déjà la liste de vos participants, vérifiez cinq points : la liste reste-t-elle sur votre poste, les doublons et les exclusions sont-ils gérés, les suppléants sont-ils tirés dans un ordre fixe, obtenez-vous un procès-verbal, et un tiers peut-il rejouer le tirage ? Cet outil a été conçu pour ces cinq points ; il ne lit ni Instagram ni Facebook à votre place.

Le tirage est-il vraiment aléatoire ?

Oui. La graine de chaque tirage est produite par crypto.getRandomValues, une fonction du navigateur que la documentation MDN décrit comme adaptée à un usage cryptographique. Le classement en est dérivé par SHA-256, avec une méthode de rejet qui évite de favoriser certaines positions. Chaque participation retenue a la même probabilité d'être tirée. Avec la règle « chaque ligne est une participation », une personne présente deux fois dans la liste dispose de deux participations.

Comment faire un tirage au sort parmi les commentaires Instagram ?

Ouvrez la publication sur ordinateur, affichez tous les commentaires, copiez-les puis collez-les dans l'onglet « Commentaires Instagram ». L'outil repère les auteurs ou les comptes mentionnés, écarte votre compte et les doublons, puis affiche un aperçu à vérifier. Il ne se connecte pas à Instagram, dont les conditions d'utilisation interdisent la collecte automatisée d'informations sans autorisation expresse. Avant de lancer le tirage, si les gagnants sont les auteurs des commentaires, comparez le nombre de participations détectées du récapitulatif avec le nombre de commentaires de la publication : un écart important peut signaler des commentaires non chargés.

Peut-on faire un tirage au sort avec Excel ?

Oui, avec la fonction ALEA.ENTRE.BORNES, mais le tirage ne se retrouve pas. Microsoft précise qu'un nouveau nombre aléatoire est renvoyé chaque fois que la feuille de calcul est calculée : le résultat change à chaque saisie dans la feuille et la formule ne permet pas de retrouver un tirage passé. Vous pouvez aussi copier la colonne des participants depuis Excel ou Google Sheets, ou enregistrer le fichier en CSV, puis l'importer ici pour obtenir gagnants, suppléants et procès-verbal.

Que faire si un gagnant ne réclame pas son lot ?

Appliquez votre règlement. Le modèle de notre générateur de règlement prévoit par défaut un délai de réclamation de 30 jours, au terme duquel le lot est perdu et peut être réattribué ou non par l'organisateur. Ce modèle ne prévoit pas de suppléants : une clause de suppléants appelés dans l'ordre du tirage doit figurer au règlement avant l'ouverture du jeu, et ne s'y ajoute pas après la clôture. L'outil tire les suppléants en même temps que les gagnants, dans un ordre fixe, et vous pouvez en ajouter après coup sans modifier les rangs déjà tirés.

La liste des participants est-elle envoyée à Gainstant ?

Non. La liste est traitée par votre navigateur et n'est envoyée ni à nos serveurs ni à un tiers. L'outil ne l'enregistre ni dans un cookie ni dans le stockage du navigateur, et ne la conserve pas après la fermeture de l'onglet. Notre mesure d'audience sans cookie reçoit les pages vues et des événements d'usage pris dans une liste fermée de noms techniques : première utilisation, import, calcul d'empreinte, tirage avec la tranche du nombre de participations, relance, ajout de suppléant, présentation, téléchargement, copie, vérification, effacement. Jamais un nom, un pseudo, une empreinte ou une graine. Vous pouvez le constater dans l'onglet Réseau des outils de développement de votre navigateur.