Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2006, 01h10   #1
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 255
Points : 5 255
Par défaut Génération de mot de passe et de code secret

<QUESTION>
Dans certains cas c'est la machine et non l'utilisateur qui doit choisir le mot de passe: Comment alors générer de façon aléatoire un nouveau mot de passe qui ne soit pas déja enregistré dans la table.
</QUESTION>

<REPONSE>
Dans ce cas j'utilise une table Client qui contient en autre info le mot de passe du client. (clé primaire)

La procédure de génération du mot de passe:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Public Sub Genere_Password()
Dim t As Variant
Dim i As Integer
Dim index As Integer
Dim Pwd As String
Dim rec As Recordset
Dim req As Recordset
 
t = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9")
 
Set req = CurrentDb.OpenRecordset("SELECT Count(Password) AS Num FROM Client;", dbOpenSnapshot)
 
   If (req!Num < 36 ^ 8) Then ' Si le nombre de mots de passe est supérieur à la valeur maximum, autrement dit jamais !!!
 
   Set rec = CurrentDb.OpenRecordset("Client", dbOpenDynaset)
 
   Do
 
   Pwd = "" 'Initialise la chaine
 
   For i = 1 To 8
   index = Int(36 * Rnd) ' génère un indice entre 0 et 35 pour le tableau
 
   Pwd = Pwd & t(index) ' Ajoute le caractère à la chaine
   Next i
 
   rec.FindFirst "Password=" & Chr(34) & Pwd & Chr(34) ' cherche si le mot de passe existe déja
 
   Loop Until rec.NoMatch ' sort si n'existe pas
 
   rec.AddNew ' On peut aussi utiliser la mise à jour suivant les cas
   rec!Password = Pwd 'Ajoute le mot de passe dans la table client
   ' on peut ajouter d'autre infos aussi
   rec.Update
 
   rec.Close
 
   Else
   MsgBox ("Plus de mot de passe disponible !")
   End If
 
req.Close
 
End Sub
Pour simplifier:

La procédure de génération de code secret (bancaire):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Public Sub Genere_Code_Secret()
Dim i As Integer
Dim Char As String
Dim Code As String
Dim rec As Recordset
Dim req As Recordset
 
Set req = CurrentDb.OpenRecordset("SELECT Count(Code_Secret) AS Num FROM Client;", dbOpenSnapshot)
 
   If (req!Num < 10 ^ 4) Then  ' Si le nombre de codes déja générés est inférieur au maximum possible
   Set rec = CurrentDb.OpenRecordset("Client", dbOpenDynaset)
 
   Do
   Code = "" 'Initialise la chaine code
 
   For i = 1 To 4
   Char = Int(10 * Rnd) ' génère un nombre entre 0 et 9
 
   Code = Code & Char ' Ajoute le caractère à la chaine
   Next i
 
   rec.FindFirst "Code_Secret=" & Chr(34) & Code & Chr(34) ' cherche si le mot de passe existe déja
 
   Loop Until rec.NoMatch ' sort si n'existe pas
 
   rec.AddNew ' On peut aussi utiliser la mise à jour suivant les cas.
   rec!Code_Secret = Code 'Ajoute le code secret dans la table client
   ' on peux ajouter d'autres informations
   rec.Update
 
   rec.Close
 
   Else
   MsgBox ("Plus de code disponible !")
   End If
 
req.Close
 
End Sub
</REPONSE>
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 15h22   #2
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
ça aurait été plus cool avec une fonction générique à laquelle on passe le nombre de caractère, et des énumérations pour savoir si on souhaite des majuscule, des chiffres et des caractères spéciaux
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2006, 21h32   #3
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 255
Points : 5 255
@ Tofalu

Oui, et toute idée nouvelle, en particulier sur la fonction générique, pour améliorer la méthode ou enrichir la discussion est la bienvenue..
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h53.


 
 
 
 
Partenaires

Hébergement Web