Pasquy_77
2009-03-25 11:41:45 UTC
Salve a tutti,
ho fatto questa semplice funzione per creare delle password in modo
casuale e di complessità differente in base ai parametri specificati.
Funziona abbastanza bene, ma mi chiedevo se qualcuno ne ha una
migliore o se si può rendere la mia un pò più efficace.
------------------------------------------------------------------------------------------------------------------------
Public Function GeneraPassword(Optional Lunghezza As Integer = "8",
Optional Complessita As String = "L9") As String
' Sintassi Complessità, esempio "L9" per pwd con caratteri minuscoli e
numeri
' La password più complessa è ottenuta specificando Complessità = "X9s
+"
' in cui i simboli "!+-*;:" vengono aggiunti 2 volte nella stringa di
insieme
' questo aumenta le probabilità di inserire più simboli nella password
' X --> caratteri Maiuscolo e Minuscolo
' U --> caratteri Maiuscolo
' L --> caratteri Minuscolo
' 9 --> numeri
' s --> segni o simboli
' + --> solo segni
Dim i As Integer, numCar As Integer
Dim strPwd As String, strInsieme As String
Const Minuscole As String = "abcdefghijklmnopqrstuvwxyz"
Const Maiuscole As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Const Numeri As String = "0123456789"
Const Segni As String = "!+-*;:"
Const Simboli As String = "!£$%&()=?^[]_<>+-/*;,:."
strInsieme = ""
'Definisco la stringa da dove prendere i caratteri per la password
'unendo gli insiemi specificati nella variabile Complessit‡
If InStr(Complessita, "X") = 0 Then 'Evito di inserire 2 volte
maiuscole e/o minuscole
If InStr(Complessita, "U") > 0 Then strInsieme = strInsieme &
Maiuscole
If InStr(Complessita, "L") > 0 Then strInsieme = strInsieme &
Minuscole
Else
strInsieme = strInsieme & Minuscole & Maiuscole
End If
If InStr(Complessita, "9") > 0 Then strInsieme = strInsieme & Numeri
If InStr(Complessita, "s") > 0 Then strInsieme = strInsieme & Simboli
If InStr(Complessita, "+") > 0 Then strInsieme = strInsieme & Segni
numCar = Len(strInsieme)
'Se Complessità contiene caratteri diversi da "XLU9S+"
If strInsieme = "" Then
strPwd = "Caratteri errati nel valore complessit‡"
Else
For i = 1 To Lunghezza
'Estraggo un carattere a caso dalla stringa di insieme
grazie alla funzione Rnd()
strPwd = strPwd & Mid(strInsieme, Int(Rnd() * numCar + 1),
1)
Next i
End If
GeneraPassword = strPwd
End Function
------------------------------------------------------------------------------------------------------------------------
Il problema di questa mia funzione è che può capitare, ad esempio se
si desidera avere i numeri nella password, che non ne compaia neanche
uno nel risultato finale.
(poco male per me, se la password non piace all'utente preme
nuovamente il pulsante finchè il risultato non lo "aggrata")
Ho visto la seguente funzione sul SitoComune (sezione moduli), ma non
mi piace molto:
5.17 Generazione di una password in maniera casuale
Avete altre idee?
Ringrazio anticipatamente
ho fatto questa semplice funzione per creare delle password in modo
casuale e di complessità differente in base ai parametri specificati.
Funziona abbastanza bene, ma mi chiedevo se qualcuno ne ha una
migliore o se si può rendere la mia un pò più efficace.
------------------------------------------------------------------------------------------------------------------------
Public Function GeneraPassword(Optional Lunghezza As Integer = "8",
Optional Complessita As String = "L9") As String
' Sintassi Complessità, esempio "L9" per pwd con caratteri minuscoli e
numeri
' La password più complessa è ottenuta specificando Complessità = "X9s
+"
' in cui i simboli "!+-*;:" vengono aggiunti 2 volte nella stringa di
insieme
' questo aumenta le probabilità di inserire più simboli nella password
' X --> caratteri Maiuscolo e Minuscolo
' U --> caratteri Maiuscolo
' L --> caratteri Minuscolo
' 9 --> numeri
' s --> segni o simboli
' + --> solo segni
Dim i As Integer, numCar As Integer
Dim strPwd As String, strInsieme As String
Const Minuscole As String = "abcdefghijklmnopqrstuvwxyz"
Const Maiuscole As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Const Numeri As String = "0123456789"
Const Segni As String = "!+-*;:"
Const Simboli As String = "!£$%&()=?^[]_<>+-/*;,:."
strInsieme = ""
'Definisco la stringa da dove prendere i caratteri per la password
'unendo gli insiemi specificati nella variabile Complessit‡
If InStr(Complessita, "X") = 0 Then 'Evito di inserire 2 volte
maiuscole e/o minuscole
If InStr(Complessita, "U") > 0 Then strInsieme = strInsieme &
Maiuscole
If InStr(Complessita, "L") > 0 Then strInsieme = strInsieme &
Minuscole
Else
strInsieme = strInsieme & Minuscole & Maiuscole
End If
If InStr(Complessita, "9") > 0 Then strInsieme = strInsieme & Numeri
If InStr(Complessita, "s") > 0 Then strInsieme = strInsieme & Simboli
If InStr(Complessita, "+") > 0 Then strInsieme = strInsieme & Segni
numCar = Len(strInsieme)
'Se Complessità contiene caratteri diversi da "XLU9S+"
If strInsieme = "" Then
strPwd = "Caratteri errati nel valore complessit‡"
Else
For i = 1 To Lunghezza
'Estraggo un carattere a caso dalla stringa di insieme
grazie alla funzione Rnd()
strPwd = strPwd & Mid(strInsieme, Int(Rnd() * numCar + 1),
1)
Next i
End If
GeneraPassword = strPwd
End Function
------------------------------------------------------------------------------------------------------------------------
Il problema di questa mia funzione è che può capitare, ad esempio se
si desidera avere i numeri nella password, che non ne compaia neanche
uno nel risultato finale.
(poco male per me, se la password non piace all'utente preme
nuovamente il pulsante finchè il risultato non lo "aggrata")
Ho visto la seguente funzione sul SitoComune (sezione moduli), ma non
mi piace molto:
5.17 Generazione di una password in maniera casuale
Avete altre idee?
Ringrazio anticipatamente