blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 2016
-
30 mai 2009 à 19:57
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 2016
-
30 mai 2009 à 20:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 20161 30 mai 2009 à 20:06
Toujours pour les débutant, voici la même fonction mais avec la suppression du Select Case, trop long et peu optimisé. Cette variante utilise un alphabet et la fonction Mid$. Tout ceci peut encore être amélioré pour réduire la taille du code :
Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String
Dim valueNumber As Integer, charLetter As String
Dim posNumber As Integer, ct As Integer
GeneratePassword = vbNullString
If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function
If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then
GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber)
Else
GeneratePassword = GeneratePassword & valueNumber
End If
Next ct
ct = Int(Len(GeneratePassword) * Rnd)
End Function
blq
Messages postés97Date d'inscriptionvendredi 22 octobre 1999StatutMembreDernière intervention13 juin 20161 30 mai 2009 à 19:57
Le code est effective simple à comprendre. Il bien d'autres méthodes sur VBFrance, mais celle-ci permet à un débutant de comprendre le code. J'en profite donc pour proposer une variante, avec mise en majuscule de certaines lettres et mélange des lettres et des chiffres, toujours en utilisant la méthode Rnd.
Il s'agit d'une fonction à appeler. L'étape supplémentaire serait de supprimer la partie Select Case par un appel à la table de l'alphabet par son numéro :
Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String
Dim valueNumber As Integer, charLetter As String
Dim posNumber As Integer, ct As Integer
GeneratePassword = vbNullString
If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function
Call Randomize
For ct = 1 To nbCharacter
Select Case 1 + Int(26 * Rnd)
Case 1
charLetter = "a"
Case 2
charLetter = "b"
Case 3
charLetter = "c"
Case 4
charLetter = "d"
Case 5
charLetter = "e"
Case 6
charLetter = "f"
Case 7
charLetter = "g"
Case 8
charLetter = "h"
Case 9
charLetter = "i"
Case 10
charLetter = "j"
Case 11
charLetter = "k"
Case 12
charLetter = "l"
Case 13
charLetter = "m"
Case 14
charLetter = "n"
Case 15
charLetter = "o"
Case 16
charLetter = "p"
Case 17
charLetter = "q"
Case 18
charLetter = "r"
Case 19
charLetter = "s"
Case 20
charLetter = "t"
Case 21
charLetter = "u"
Case 22
charLetter = "v"
Case 23
charLetter = "w"
Case 24
charLetter = "x"
Case 25
charLetter = "y"
Case 26
charLetter = "z"
End Select
If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then
GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber)
Else
GeneratePassword = GeneratePassword & valueNumber
End If
Next ct
ct = Int(Len(GeneratePassword) * Rnd)
End Function
30 mai 2009 à 20:06
Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String
Dim valueNumber As Integer, charLetter As String
Dim posNumber As Integer, ct As Integer
GeneratePassword = vbNullString
If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function
For ct = 1 To nbCharacter
Call Randomize
charLetter = Mid$("abcdefghijklmnopqrstuvwxyz", 1 + Int(26 * Rnd), 1)
GeneratePassword = GeneratePassword & IIf(Int(6 * Rnd) > 3, UCase$(charLetter), charLetter)
Next ct
For ct = 1 To nbNumber
valueNumber = Int(9 * Rnd)
Call Randomize
posNumber = Int(Len(GeneratePassword) * Rnd)
If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then
GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber)
Else
GeneratePassword = GeneratePassword & valueNumber
End If
Next ct
ct = Int(Len(GeneratePassword) * Rnd)
End Function
30 mai 2009 à 19:57
Il s'agit d'une fonction à appeler. L'étape supplémentaire serait de supprimer la partie Select Case par un appel à la table de l'alphabet par son numéro :
Public Function GeneratePassword(ByVal nbCharacter As Integer, ByVal nbNumber As Integer) As String
Dim valueNumber As Integer, charLetter As String
Dim posNumber As Integer, ct As Integer
GeneratePassword = vbNullString
If nbCharacter <= 0 And nbNumber <= 0 Then Exit Function
Call Randomize
For ct = 1 To nbCharacter
Select Case 1 + Int(26 * Rnd)
Case 1
charLetter = "a"
Case 2
charLetter = "b"
Case 3
charLetter = "c"
Case 4
charLetter = "d"
Case 5
charLetter = "e"
Case 6
charLetter = "f"
Case 7
charLetter = "g"
Case 8
charLetter = "h"
Case 9
charLetter = "i"
Case 10
charLetter = "j"
Case 11
charLetter = "k"
Case 12
charLetter = "l"
Case 13
charLetter = "m"
Case 14
charLetter = "n"
Case 15
charLetter = "o"
Case 16
charLetter = "p"
Case 17
charLetter = "q"
Case 18
charLetter = "r"
Case 19
charLetter = "s"
Case 20
charLetter = "t"
Case 21
charLetter = "u"
Case 22
charLetter = "v"
Case 23
charLetter = "w"
Case 24
charLetter = "x"
Case 25
charLetter = "y"
Case 26
charLetter = "z"
End Select
Call Randomize
GeneratePassword = GeneratePassword & IIf(Int(6 * Rnd) > 3, UCase$(charLetter), charLetter)
Next ct
For ct = 1 To nbNumber
valueNumber = Int(9 * Rnd)
Call Randomize
posNumber = Int(Len(GeneratePassword) * Rnd)
If posNumber >= 0 And posNumber <= Len(GeneratePassword) Then
GeneratePassword = Left$(GeneratePassword, posNumber) & valueNumber & Right$(GeneratePassword, Len(GeneratePassword) - posNumber)
Else
GeneratePassword = GeneratePassword & valueNumber
End If
Next ct
ct = Int(Len(GeneratePassword) * Rnd)
End Function