begin process at 2012 02 14 00:20:53
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > OBTENIR DE VRAIS NB ALEATOIRE

OBTENIR DE VRAIS NB ALEATOIRE


 Description

Cliquez pour voir la capture en taille normale
Est-il possible d'écrire un programme qui renvoi de vrais nombre aléatoire (imprévisible, équiprobable, et tout le tralala)? OUI! Comment? En se "servant" d'une source parfaitement aléatoire, extérieure au monde informatique. Ca nécessite bien sûr une "interface" entre le monde physique et le monde informatique. L'interface que j'utilise ici s'appelle random.org...

Source

  • '*************************************************************************
  • ' TRUERND - Obtenir de VRAIs nombres aléatoire grâce au service random.org
  • '
  • ' NECESSITE UNE CONNEXION INTERNET
  • '
  • 'Auteur : Egyde (sendoval_fr@yahoo.fr)
  • 'Date de création : 28/02/06
  • '*************************************************************************
  • Option Explicit
  • Private strmem As String
  • Private truernd() As String
  • Private Sub Command1_Click()
  • 'on se connecte à Random.org
  • Winsock1.Close
  • Text1.Text = ""
  • Winsock1.Connect "random.org", 80
  • End Sub
  • Private Sub Winsock1_Connect()
  • Dim cmd As String
  • 'raz du buffer de réception
  • strmem = ""
  • 'on formate la requête
  • cmd = "GET /cgi-bin/randnum?num=" & txtTotalNb.Text & "&min=" & txtSmallest.Text & "&max=" & txtLargest.Text & "&col=1" & vbCrLf & _
  • "Accept: text" & vbCrLf & _
  • "Referer: http://www.random.org" & vbCrLf & _
  • "Host: www.random.org"
  • 'note : le contenu des textbox devrait être vérifiés mais bon...
  • 'envoi de la requête
  • Winsock1.SendData cmd
  • End Sub
  • Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  • Dim Buffer As String
  • Dim Reconnect As Boolean
  • Winsock1.GetData Buffer
  • strmem = strmem & Buffer
  • If IsAllReceived Then
  • truernd = Split(strmem, vbLf) ' à convertir en Double éventuellement
  • Text1.Text = Replace(strmem, vbLf, vbCrLf)
  • strmem = ""
  • Winsock1.Close
  • End If
  • End Sub
  • 'fonction qui retourne vrai ssi on a reçu tous les nombres aléatoires
  • Private Function IsAllReceived() As Boolean
  • Dim i As Long
  • Dim nboccur As Long
  • 'chaque nombre retourné par random.org est séparé par le caractère
  • 'VbLf. Pour déterminer si la page a été reçu dans son intégralité,
  • 'on compte simplement le nb d'occurence de ce caractères.
  • i = 1
  • nboccur = 0
  • While InStr(i, strmem, vbLf) > 0
  • nboccur = nboccur + 1
  • i = InStr(i, strmem, vbLf) + 1
  • Wend
  • If nboccur = CLng(txtTotalNb.Text) Then
  • IsAllReceived = True
  • End If
  • End Function
'*************************************************************************
' TRUERND - Obtenir de VRAIs nombres aléatoire grâce au service random.org
'
' NECESSITE UNE CONNEXION INTERNET
'
'Auteur : Egyde (sendoval_fr@yahoo.fr)
'Date de création : 28/02/06
'*************************************************************************

Option Explicit

Private strmem      As String
Private truernd()   As String

Private Sub Command1_Click()
    'on se connecte à Random.org
    Winsock1.Close
    Text1.Text = ""
    Winsock1.Connect "random.org", 80
End Sub

Private Sub Winsock1_Connect()

    Dim cmd As String

    'raz du buffer de réception
    strmem = ""
    
    'on formate la requête
    cmd = "GET /cgi-bin/randnum?num=" & txtTotalNb.Text & "&min=" & txtSmallest.Text & "&max=" & txtLargest.Text & "&col=1" & vbCrLf & _
          "Accept: text" & vbCrLf & _
          "Referer: http://www.random.org" & vbCrLf & _
          "Host: www.random.org"
    
    'note : le contenu des textbox devrait être vérifiés mais bon...
    
    'envoi de la requête
    Winsock1.SendData cmd
    
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

    Dim Buffer As String
    Dim Reconnect As Boolean

    Winsock1.GetData Buffer

    strmem = strmem & Buffer

    If IsAllReceived Then
        truernd = Split(strmem, vbLf) ' à convertir en Double éventuellement
        Text1.Text = Replace(strmem, vbLf, vbCrLf)
        strmem = ""
        Winsock1.Close
    End If
       
End Sub

'fonction qui retourne vrai ssi on a reçu tous les nombres aléatoires
Private Function IsAllReceived() As Boolean

    Dim i As Long
    Dim nboccur As Long
    
    'chaque nombre retourné par random.org est séparé par le caractère
    'VbLf. Pour déterminer si la page a été reçu dans son intégralité,
    'on compte simplement le nb d'occurence de ce caractères.
    i = 1
    nboccur = 0
    While InStr(i, strmem, vbLf) > 0
        nboccur = nboccur + 1
        i = InStr(i, strmem, vbLf) + 1
    Wend
    If nboccur = CLng(txtTotalNb.Text) Then
        IsAllReceived = True
    End If

End Function

 Conclusion

Le code proposé ci-dessus fait suite à la discussion très interessante d'une des sources de julien39 :
http://www.vbfrance.com/codes/FONCTION-VRAIMENT- ALEATOIRE_36257.aspx

Les nombres obtenus sont restreint aux entiers. Avec quelques opérations élémentaires, on obtient facilement un équivalent décimal.

Aléatoire ou pas aléatoire? Pour couper court aux débats métaphysiques, je renvoi les utilisateurs interessé à http://www.random.org/essay.html

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture COVER SEARCH
Source avec Zip Source avec une capture NG FILM IDENTIFIER
Source avec Zip Source avec une capture EXPLORER RÉCURSIVEMENT UN SERVEUR FTP DISTANT
Source avec Zip Source avec une capture TREEVIEW - SAUVEGARDER L'ARBORESCENCE D'UN ARBRE
Source avec Zip Source avec une capture TREEVIEW : RÉCUPÉRER LE CHEMIN COMPLET D'UN NOEUD

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) POKER - CALCUL DE PROBABILITES POUR VOS MAINS EN VB.NET par us_30
CHAÎNE ALÉATOIRE / RANDOM STRING par mizoz
TROUVER LE NOMBRE [VBS] par maxwells
Source avec Zip Source avec une capture DESORDONNEUR - BORDÉLISER UN TABLEAU par Alain Proviste
Source avec Zip PETITE CLASSE RANDOM... par raff

Commentaires et avis

Commentaire de Egyde le 27/02/2006 21:43:20

J'ai mis cette source dans la catégorie "Réseau & Internet". Vous comprendrez pourquoi...

A ne pas utiliser dans le cadre d'applications 'sensibles' (cryptographiques) sans prendre quelques précautions préalables (vérifier le fichier hosts est, me semble-t-il, un minimum).

Commentaire de DARKSIDIOUS le 27/02/2006 22:41:09 administrateur CS

Je pense qu'essayer d'obtenir de véritables nombres aléatoire n'est qu'une pure utopie : dès qu'on se base sur quelque chose pour les générer, il ne s'agit plus de nombre aléatoire, car calculés... et oui, tu a beau faire appel à des prévisions météo (ou je ne sais trop quoi), ca n'en reste que des nombres quasi-aléatoires, mais tant qu'ils ont réussi à les générer, cela implique qu'une autre machine est capable de générer les mêmes nombres aléatoires...

Enfin, la fonction standard de VB suffit déjà dans la majorité des cas je trouve !

DarK Sidious

Commentaire de BruNews le 27/02/2006 23:01:09 administrateur CS

Tu ferais au moins aussi aléatoire en qlqs lignes asm placées dans une vraie dll, tu aurais par contre des résultats en quasi instantané.
Suffit d'exporter une fonction InitRand() sans aucun param, tu obtiens le seedRand (conservé dans dll) par RDTSC et ce sera quasi irreproductible (1 chance sur 2 pow 64) car personne n'intervient sur ce seedRand et quasi aucune chance de retomber sur le même nombre de ticks processeur.

Commentaire de Egyde le 28/02/2006 08:02:03

Il est bien connu qu'un même capteur ne te donnera JAMAIS exactement 2 fois la même valeur, même dans des conditions initiales!! Donc, NON : une autre machine n'est pas capable de générer les mêmes nombres.

Maintenant, utopie ou pas, il est certain qu'on peut se contenter de fonction déterministe tierce.

Commentaire de Mindiell le 28/02/2006 09:56:33

Pour précision intéressante, en France, le Rapido est le seul jeu de hasard ou la présence d'un huissier n'est pas obligatoire, puisque la francaise des jeux utilise aussi le bruit comme générateur de nombres.

DarkSidious, li n'utilise pas la météo, mais le bruit. Le bruit est un signal faible qui correspond a la neige de ta télé, ou au crachat dans ta radio. Même sur un signal 220V qui fait marcher ton PC, tu as un bruit léger, qui doit tourner entre -5V et +5V et qui est donc tellement faible que inutile. Mais tu as rarement pile 220V au bout du circuit.

Voila comment c'est generer. Très intéressant que des gens l'ait mis sur Internet.

Commentaire de DARKSIDIOUS le 28/02/2006 10:38:09 administrateur CS

Que ce soit de la météo ou du bruit, le raisonnement reste le même : je ne pense pas que ce système donne un générateur de nombre véritablement aléatoires. Le système utilisé reste matériel, donc il est possible (même si c'est sûrement très difficile) de le simuler par un ordinateur ou une autre machine.
De là à dire qu'un même capteur te donnera JAMAIS 2 fois la même valeur, qu'est-ce qui te permet d'être aussi catégorique ?
Peut-être que c'est vrai, mais tant que c'est une macine qui interprête ce que capte le capteur...
C'est bien beau de mesurer quelque chose de totalement imprévisible, mais c'est la mesure qui devient le générateur du coup, plus le phénomène physique, puisque la précision de la mesure est forcément limitée.
Je ne continuerai pas ce débat pour ne pas pourir les commentaires de cette source qui reste intéressante, mais c'était juste pour vous donner mon opinion : je ne crois pas qu'un générateur de nombre aléatoire parfait existe (sinon ca se saurais !!!).

DarK Sidious

Commentaire de Egyde le 28/02/2006 12:28:09

"qu'est-ce qui te permet d'être aussi catégorique?"
----------------------------------------------------
Tout simplement l'environnement : température ambiante, tension d'alimentation, pression atmosphérique, etc. De plus, n'oublions pas que reproduire la séquence nécessiterait d'être parfaitement synchroniser... Tenter de reproduire tous ces paramètres, ça s'est de l'utopie!

"je ne crois pas qu'un générateur de nombre aléatoire parfait
-------------------------------------------------------------
existe (sinon ca se saurais !!!)"
----------------------------------

Et bien justement... :

"There is a DEFINITE NEED FOR DATA WITH ENTROPY NOT BASED ON ALGORITHMS. As to whether we need *true* random numbers, that's a subject for debate. Typically we get data that's as good as we need it to be from a hardware generator by running the initial data (which may have some kind of pattern or bias) through an algorithm which sort of mixes it. But it is very usefull to have this entropy come from a hardware device, because it affords an EXTRA LEVEL OF SECURITY; pseudorandom numbers can be compromised if the algorithm is known and the seed is discovered, but THERE IS NO SUCH EQUIVALENT FOR RANDOM NUMBERS GENERATED BY A HARDWARE DEVICE."

Moses Liskov (faq-editor@rsa.com), http://www.rsa.com/ , year 2000

Voir également :

http://www.true-random.com/

Commentaire de Lucyberad le 01/03/2006 01:28:53

franchement, je comprend pas pourquoi on "s'emmerde" a chercher des random vrai et des random faux. que ce soit l'horloge du pc ou la meteo, du moment que les nombre finaux sont imprevisible, il n'y as que la nasa pour vouloir securiser par ce biais pour eviter de decouvrir les nombres par le hacking de l'algorythme.
j'imagine bien mettre dans ma petite application, bonjour veuillez patienter durant le chargement d'un random parfait...
sinon j'accorde parfaitement avec la pensée de darksidious !

Commentaire de cuq le 01/03/2006 08:38:16

Juste pour mettre mon petit grain de sel il me semble qu'il existe aussi sur certain Os (Linux) la génération de nombre aléatoire donné par les actions utilisateur . Nombre généré selon la séquence des touches utilisé sur le clavier, mouvement de la souris etc ... Donc la génération dépend d'une action humaine qu'il est plus difficile de reproduire , mais dans ce cas c'est directement l'os qui gère le nombre aléatoire ..

Commentaire de Mindiell le 01/03/2006 08:59:20

@Lucyberad
C'est pas toujours une question d'algo de cryptage et de sécurité... Si la fonction de nombres aléatoires n'est pas correcte, tu te retrouveraas soit à cycler, soit à avoir une période de sortie différente pour chaque nombre lors de grands tirages.

@DarkSidious
Désolé, mais je crois que tu en fais un peu trop. Si ton capteur ne peut capter qu'entre -5.00 et +5.00, il captera totu de même des nombres imprévisibles. Le bruit est, par définition, un signal non prévisible.

Commentaire de Egyde le 01/03/2006 09:52:02

Pour ceux qui n'ont pas l'imagination suffisante pour comprendre l'intérêt de nombres générés de cette façon, il me semble que la citation tirée de rsa.com (le site spécialisé en cryptographie...) éclaire déjà suffisament la question.

Bon, allez, je fais un petit effort :
http://www.random.org/users.html

Ca recense plus de 100 exemples d'utilisations... Des utilisateurs qui expliquent pourquoi ils utilisent random.org (un site web qui existe depuis 1998 tout de même).

Commentaire de jannoman le 01/03/2006 21:52:38

perso je pense qu'un générateur est aléatoire (entre 0 et 1 pour simplifier) si :
1) la suite des nombres générés est équirépartie (i.e : lim Card {k <= n, a <= u(k) <= b} /n -> b - a
(en gros ca dit que la probabilité de la suite de tomber dans un intervalle est proportionnelle à la largeur de l'intervalle)
2) on ne peut pas connaissant u0, u1, ... u(n) deviner u(n + 1)

pour DarkSidious : oui je pense comme toi que mesurer les variations d'un capteur c'est THEORIQUEMENT non aléatoire puisqu'il suffit de s'acheter le même capteur et de le faire fonctionner bien que PRATIQUEMENT à cause des effets chaotiques, ca marche

comme le chaos existe au niveau atomique, on peut cependant supposer qu'il existe une machine permettant de créer des nombres aléatoires. (puisque 2 particules dans le même état strictement ne donneront pas 2 mêmes effets)

Commentaire de Artispsyko le 13/05/2006 20:56:24

Il n'est pas possible de fabriquer 2 capteurs identiques. Ou alors il faudrait s'amuser à les construire atome par atome (et donc de le payer million par million...). Et même là, les differents capteur renverraient des valeurs différentes, dues à l'environnement d'utilisation (celon la température, l'usure du capteur, les champs magnétiques environant, etc... - Le chaos est partout, nous sommes le chaos! ;)). On peut juste "viser" un interval de précision dans lka fabrivation d'un capteur, pour une plage d'utilisation donnée, dans un certain environnement.

Commentaire de Kristof_Koder le 06/02/2008 22:25:01

Je remet cent sous dans la machine !
Juste pour dire que, une mesure physique de ce genre (audio, bruit sur une ligne, etc...) même s'il sont très difficile à reproduire ne sont pas pour autant aléatoire (au sens mathématique du terme) ! Ohn est juste dan sle domaine de l'imprévisible. Il y a juste trop de paramètres pour pouvoir être modéliser mathématiquement, mais c'est en théorie possible. On aborde alors le sujet des "théories du chaos".
Il semble qu'il n'existe qu'un moyen de faire du véritable "aléatoire" ... en utilisant les lois de la physique quantique (et encore, tous les physiciens quantiques ne sont pas de cet avis !)En tout cas, c'est ce qui se rapproche le plus de l'aléatoire mathématique : Par exemple, lorsqsu'on lance un photon contre un mirroir semi-transparent selon un angle de 45°, soit le photon traverse le mirroir, soit il est réfléchit par ce même mirroir, repartant à 90° de se direction initiale. Des générateurs de nombres aléatoires fonctionnant sur ce principe existe : http://www.randomnumbers.info/

Mais encor eune fois, tous les physiciens quantiques ne sont pas de cet avis !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème de génération de nombre aléatoire [ par fdiedler2000 ] Bonjour à tous,Je voudrais générer dans une boucle deux nombre aléatoire. Voila ce que j'ai fais :*****************        While testersolution() = Fa fichier random [ par darkmalcolm ] Salut a tous, Je suis actuellement sur un projet dont la base de donnée est basée sur des fichiers random. Je n'ai pas eu de souci pour y acceder mais réutiliser une donnée aléatoire [ par vegetalain ] Bonjour tout le monde... hm, voilà, j'ai entendu dire qu'une suite aléatoire de caractère pouvait garantir un bon niveau de sécu pour du cryptage... s mélange deux textbox non aléatoire [ par vegetalain ] Salut tout le monde... hm voilà, toujours dans mon super projet de programme de cryptage, j'aimerais inclure ce type de mélange de caractères : si on Classement et Notes des Sources sur VBF [ par us_30 ] La note sur une source est le résultat du calcul de la moyenne des notes attribuées. Ce calcul est acceptable dans la mesure où tout un chacun compren Fonction Random ! Rnd ? [ par robapt ] Bonjour à tous !Voila, je fais un petit prog qui utilise la fonction Rnd et je voudrais savoir un truc.Voici mon code : RandomizeList1.AddItem Int((50 Ouvrir un fichier aléatoire automatquement [ par benjaminjumeaucourt ] Bonjour,Je voudrais faire une macro qui ouvrirai un fichier Excel portant un nom aléatoire dépendant de la date de la veille (Jaammjj aa pour année et VBA : nombre aléatoire suivant une loi normale [ par slider41 ] Bonjour, Voila je suis débutant en programmation et je cherche à programmer sous excel et donc en VBA une fonction pour pricer les options par la méth Tirage aléatoire [ par missa27 ] Salut à tous !!je veux devélopper une application pour gerer les tirage au sort.Il s'agit de tirer par exemple un numéro de téléphone parmi une centai lecture aléatoire wmp [ par Paulo670 ] Bonjour,Comment fait on pour savoir si le lecteur wmp est en mode lecture aléatoire ou non ? Même question pour la lecture en boucle.Pour mettre en le


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales