IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Random et horloge interne


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut Random et horloge interne
    Bonjour,

    Je rencontre une difficulté avec la fonction System.Random :

    je génère des centaines de mots de passe dans une boucle, et je me retrouve avec des paquets de 6 ou 7 mots de passe identiques...
    On dirait que lors d'un même intervalle de temps machine, le Random renvoie toujours la même valeur, ce qui donne des ensembles identiques...

    Je ne veux pas contourner en testant chaque mot de passe avec le précédent, ce qui allongerait pas mal le temps de traitement.

    Y a-t-il une autre fonction que le Random classique ?

    Par avance merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Par défaut
    Bonjour,

    Conserves tu ton instance de Random a chaque tour de boucle?
    Comment as tu initialisé ton instance de Random?
    Une bonne facon de l'initialisé, c'est de lui donné le nombre de tick du jour (DateTime.Now.Ticks)

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut
    Bonjour Antoine,

    Non je crée une nouvelle instance de mon Random, que j'utilise dans une fonction statique d'une classe "Util".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            public static string GeneratePassword(int Length) {
                char[] Chars = "0123456789abcdefghijklmnopqrstuvwxyz".ToCharArray();
                string Password = string.Empty;
                System.Random rnd = null;
                rnd = new System.Random();
                for (int i = 0; i < Length; i++)
                    Password += Chars[rnd.Next(Chars.Length)];
                return Password;
            }
    Je vais de ce pas l'initialiser comme tu l'as suggéré.
    Merci et @ + !

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut
    Antoine pour appliquer ta méthode, j'ai bidouillé le Ticks car c'est un long, or pour initialiser le Random il faut un int. J'ai donc passé uniquement les 4 derniers caractères du Tick.

    Mais cette méthode ne résout pas mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            public static string GeneratePassword(int Length) {
                char[] Chars = "0123456789abcdefghijklmnopqrstuvwxyz".ToCharArray();
                string Password = string.Empty;
                System.Random rnd = null;
                string ticks = DateTime.Now.Ticks.ToString();
                rnd = new System.Random(Int16.Parse(ticks.Substring (ticks.Length - 4)));
                for (int i = 0; i < Length; i++)
                    Password += Chars[rnd.Next(Chars.Length)];
     
                return Password;
            }
    En fait mon Tick est le même pendant un certain intervalle de temps, donc le résultat est que des mots de passe sont identiques par paquets de 6 ou 7.

    Si je me mets en pas à pas, ils sont tous différents...

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Août 2004
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 282
    Par défaut Pb résolu
    Bon en fait mon erreur était de créer mon Random dans ma fonction : il fallait le sortir et le déclarer en static, et tout fonctionne.
    @+ !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture horloge interne
    Par lutin_malin dans le forum Langage
    Réponses: 1
    Dernier message: 18/04/2008, 09h33
  2. [Débutant] Random : se baser sur l'horloge interne
    Par nanath02 dans le forum Langage
    Réponses: 1
    Dernier message: 19/03/2007, 14h38
  3. Horloge interne.
    Par HopeLeaves dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2006, 13h53
  4. Pb d'horloge interne
    Par Gnux dans le forum Composants
    Réponses: 9
    Dernier message: 03/09/2005, 08h47
  5. Horloge interne pb de Time and Date
    Par Max Payne dans le forum Composants
    Réponses: 6
    Dernier message: 30/07/2005, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo