| Modules |
| 5.17 Generazione di una password in maniera casuale |
| Simone Pestelli |
Quella che segue è una funzione per creare password in maniera casuale e/o tramite un template.
Public Function MkPwd(Optional Lunghezza As Integer, Optional Template As String) As String
' ***************************************
' By Simone Pestelli s.pestelli@mclink.it
' Luglio 2004
' ***************************************
'
' Lunghezza ->Lunghezza password
'
' Sintassi Template
' X -> carattere Maiuscolo o Minuscolo
' U -> carattere Maiuscolo
' L -> carattere Minuscolo
' 9 -> numero
' . -> segno di interpunzione
' ^ -> segno o simbolo
' se viene passato solo la lunghezza della password viene generato una conbinazione casuale di caratterni numeri segni e simboli
' Se viene passato solo il template viene preso come esempio della stringa da realizzare
' se viene passato lunghezza e template viene ripetuto il template nella lunghezza richiesta
' se il template contiene caratteri diversi da quelli ammessi viene genarato casualmente u carattere
Dim Carattere As String
Dim Lettere As String
Dim Numeri As String
Dim Segni As String
Dim Simboli As String
Dim Tipologia As String
Dim Ciclo As Integer
Dim Ciclo1 As Integer
Dim Puntatore As Integer
Dim Campione As String
Dim Verifica As String
Dim Valido As Boolean
Randomize
Lettere = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Numeri = "0123456789"
Segni = "+-/*;,:."
Simboli = "!£$%&()=?^[]_<>+-/*;,:."
Tipologia = "X9.^UL"
If Lunghezza = 0 And Template = "" Then ' non è specificato niente!!!
MkPwd = "Errore [Numero parametri]"
Exit Function
End If
If Lunghezza <> 0 Then ' se è specificata la lunghezza
If Template = "" Then ' se il template è vuoto lo creo
For Ciclo = 1 To Lunghezza
Campione = Campione & Mid(Tipologia, Int((Len(Tipologia) - 1 + 1) * Rnd + 1), 1)
Next Ciclo
Else
Puntatore = 1 ' altrimenti replico il template nella lunghezza
For Ciclo = 1 To Lunghezza
Campione = Campione & Mid(Template, Puntatore, 1)
Puntatore = Puntatore + 1
If Puntatore > Len(Template) Then Puntatore = 1
Next Ciclo
End If
End If
If Lunghezza = 0 Then Campione = Template
' verifica sintassi campione
For Ciclo = 1 To Len(Campione) 'scorro la stringa camione
Carattere = UCase(Mid(Campione, Ciclo, 1)) ' prendo un carattere del campione
Valido = False
For Ciclo1 = 1 To Len(Tipologia)
If Carattere = Mid(Tipologia, Ciclo1, 1) Then Valido = True ' confronto il carattere con il campione se è valido ->true
Next Ciclo1
If Not Valido Then ' se il carattere non è valido lo metto a caso
Carattere = Mid(Tipologia, Int((Len(Tipologia) - 1 + 1) * Rnd + 1), 1)
End If
Verifica = Verifica & Carattere
Next Ciclo
For Ciclo = 1 To Len(Verifica) ' infine genero la password
Select Case Mid(Verifica, Ciclo, 1)
Case "X"
Carattere = Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd + 1), 1)
Case "U"
Carattere = UCase(Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd + 1), 1))
Case "L"
Carattere = LCase(Mid(Lettere, Int((Len(Lettere) - 1 + 1) * Rnd + 1), 1))
Case "9"
Carattere = Mid(Numeri, Int((Len(Numeri) - 1 + 1) * Rnd + 1), 1)
Case "."
Carattere = Mid(Segni, Int((Len(Segni) - 1 + 1) * Rnd + 1), 1)
Case "^"
Carattere = Mid(Simboli, Int((Len(Simboli) - 1 + 1) * Rnd + 1), 1)
End Select
MkPwd = MkPwd & Carattere
Next Ciclo
End Function
Si ritiene che la funzione possa essere usata con titte le funzioni di Access. Allegati alla FAQ ci sono due database: quello chiamato Password.mdb è la versione originale fatta da Simone Pestelli ed è nel formato Access 2000; c'è poi anche il database Password97.mdb che è la versione in Access 97 ottenuta per conversione da Alessandro Baraldi, per la qual cosa lo ringraziamo. Download: |