Newsgroup: it.comp.appl.access
Titolo: form password con obbligo di caratteri maiuscoli e minuscoli

Ciao ha tutti ho questa form per la validazione di una password
attualmente contiene le istruzioni che obbligano l'utente all'utilizzo
di lettere, numeri e caratteri speciali vorrei completerla con
l'obbligo di utilizzare anche maiuscole e minuscole.
qualcuno può aiutarmi?
codice:
Public Function validatePassword(buf As String) As Boolean
Dim strC As String
Dim nI As Long
Dim blnN As Boolean
Dim blnC As Boolean
Dim blnX As Boolean
If Len(Trim(buf)) < 8 Then
    validatePassword = False
    MsgBox ("La password deve essere composta da almeno otto
caratteri"), vbCritical, "ATTENZIONE"
    Exit Function
End If
' la password deve contenere sia numeri che lettere che caratteri
speciali
blnC = False
blnN = False
blnX = False
strC = Trim(buf)
For nI = 1 To Len(strC)
If IsNumeric(Mid(strC, nI, 1)) Then
        blnN = True
 ElseIf ((Mid(strC, nI, 1) >= "A" And Mid(strC, nI, 1) <= "Z") Or _
    (Mid(strC, nI, 1) >= "a" And Mid(strC, nI, 1) <= "z")) Then
        blnC = True
 Else
        blnX = True
 End If
     If blnN And blnC And blnX Then Exit For
Next nI
If Not blnN Or Not blnC Or Not blnX Then
    MsgBox "La password deve contenere almeno un numero, una lettera
ed un carattere speciale", vbCritical, "ATTENZIONE"
    validatePassword = False
Else
    validatePassword = True
End If
End Function

 ha scritto nel messaggio 
news:2c4d8770-f59b-473c...@m25g2000yqc.googlegroups.com...
Ciao ha tutti ho questa form per la validazione di una password
attualmente contiene le istruzioni che obbligano l'utente all'utilizzo
di lettere, numeri e caratteri speciali vorrei completerla con
l'obbligo di utilizzare anche maiuscole e minuscole.
qualcuno pu� aiutarmi?
codice:



-------------------------------------
Risposta
Sono certamente maiuscole gli asc compresi tra 65 e 90 inclusi.
Sono certamente minuscole gli asc compresi tra 97 e 122 inclusi.
Per cui: se asc("tuocarattere") restituisce un numero tra 65 e 90 inclusi � 
maiuscolo.
Puo' bastare?
Ciao, Carlo 

 Ciao, Carlo
Ciao Carlo,
in base alle mie scarse conoscenze praticamente non ho capito nulla di
quello che mi hai detto :-)
puoi aiutarmi a correggere questo codice?

 Ciao, Carlo
Ciao Carlo,
in base alle mie scarse conoscenze praticamente non ho capito nulla di
quello che mi hai detto :-)
puoi aiutarmi a correggere questo codice?
-----------------------
Devo dedurre che il codice che hai postato sia frutto di un copia e incolla.
In questo preciso momento non posso occuparmene...A breve ti posto una 
soluzione.
Permettimi il consiglio di approfondire meglio la programmazione.
Ciao, Carlo 

 - Mostra testo citato -
ok ti ringrazio per la disponibilità

 ha scritto nel messaggio
cut
ok ti ringrazio per la disponibilit�
-------------------------------
Questa una possibile soluzione:
Public Function validatePassword(buf As String) As Boolean
Dim strC As String
Dim nI As Long
Dim blnN As Boolean 'variabile per il numero
Dim blnC As Boolean 'variabile per il carattere
Dim blnX As Boolean 'variabile per i caratt. speciali
Dim blnMaiu As Boolean 'variabile per le maiuscole
Dim blnMin As Boolean  'variabile per le minuscole
If Len(Trim(buf)) < 8 Then
    validatePassword = False
    MsgBox ("La password deve essere composta da almeno otto caratteri"), 
vbCritical, "ATTENZIONE"
    Exit Function
End If
'la password deve contenere sia numeri che lettere
'che caratteri speciali oltre che maiuscole e minuscole
blnC = False
blnN = False
blnX = False
blnMaiu = False
blnMin = False
strC = Trim(buf)
For nI = 1 To Len(strC)
    If IsNumeric(Mid(strC, nI, 1)) Then
            blnN = True
     '-----------------------------------------
     'verifico se ci sono maiuscole e quindi
     'anche il carattere � presente
     ElseIf Asc(Mid(strC, nI, 1)) > 64 And Asc(Mid(strC, nI, 1)) < 91 Then
     blnMaiu = True
     blnC = True
     'verifico se ci sono minuscole e quindi
     'anche il carattere � presente
     ElseIf Asc(Mid(strC, nI, 1)) > 96 And Asc(Mid(strC, nI, 1)) < 123 Then
     blnMin = True
     blnC = True
     '-----------------------------------------
     'verifico se ci sono caratteri speciali tra
     '33 47  e 58  64   e 91  96  e 123  126
     ElseIf Asc(Mid(strC, nI, 1)) > 32 And Asc(Mid(strC, nI, 1)) < 48 Then
     blnX = True
     ElseIf Asc(Mid(strC, nI, 1)) > 57 And Asc(Mid(strC, nI, 1)) < 65 Then
     blnX = True
     ElseIf Asc(Mid(strC, nI, 1)) > 90 And Asc(Mid(strC, nI, 1)) < 97 Then
     blnX = True
     ElseIf Asc(Mid(strC, nI, 1)) > 122 And Asc(Mid(strC, nI, 1)) < 127 Then
     blnX = True
     '-----------------------------------------
     End If
         If blnN And blnC And blnX And blnMaiu And blnMin Then Exit For
Next nI
If Not blnN Or Not blnC Or Not blnX Or Not blnMin Or Not blnMaiu Then
    MsgBox "La password deve contenere almeno un numero, una lettera, un 
carattere speciale una lettera maiuscola e una minuscola", vbCritical, 
"ATTENZIONE"
    validatePassword = False
Else
    validatePassword = True
End If
End Function
Fammi sapere.
Ciao, Carlo

 ...
Un'alternativa sarebbe controllare l'intero password ad un colpo:
If StrComp(strC, UCase(strC), vbBinaryCompare) = 0 _
    Or StrComp(strC, LCase(strC), vbBinaryCompare) = 0 Then
    ' ci sono solo maiuscole o minuscole o nessun lettera
Else
    ' tutto a posto
End If
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 Karl
Si, va bene ma se applicato sul singolo carattere e non sull'intera stringa.
Lui ha bisogno di fare un parsing lettera per lettera.
Ciao, Carlo

 Ciao, Carlo
grazie mille Carlo e karl per la disponibilità
Carlo ho notato che il controllo lo fa solo sulla password e non sulla
password di verifica
in pratica se la password di verifica la scrivo tutta minuscola purchè
corretta l'accetta comunque
un altra cosa è possibile far resettare i campi in caso di errore?
così da evitare che rimangano comunque gli asterischi?
per il resto così provata al volo mi pare che faccia il suo dovere
grazie

 Ciao, Carlo
grazie mille Carlo e karl per la disponibilit�
Carlo ho notato che il controllo lo fa solo sulla password e non sulla
password di verifica
-----------------------
Non ne hai mai parlato...
in pratica se la password di verifica la scrivo tutta minuscola purch�
corretta l'accetta comunque
--------------------------
e ci credo! Devi usare Option compare Binary per il confronto binario tra 
stringhe.
Siccome va dichiarato a livello di modulo ti consiglio di mettere il codice 
di confronto in un modulo separato. In testa al modulo:
Option Compare Binary
Option Explicit
'tue variabili globali se ne hai
'Tue funzioni
Oppure, prendendo spunto dal codice di Karl, quando fai la verifica della 
password impostata/inserita con quella memorizzata:
If StrComp("PasswordInserita", "PasswordMemorizzata", vbBinaryCompare) = 0 
then
'le due stringhe sono identiche
else
'la due password sono diverse
End if
------------------------------------------------
un altra cosa � possibile far resettare i campi in caso di errore?
cos� da evitare che rimangano comunque gli asterischi?
per il resto cos� provata al volo mi pare che faccia il suo dovere
grazie
------------------------
Premetto che non conosco il nome dei tuoi "campi" (si dice "controlli") e 
nemmeno se il codice gira in un modulo globale o locale a una maschera:
If TuaFunzioneDiVerifica_o_QuelloCheTiPare = False then
Me.NomeControllo = ""
'oppure Forms!NomeMaschera!NomeControllo = ""
End if
Ciao, Carlo 

 - Mostra testo citato -
Ciao,
il codice gira nella maschera e non nel modulo ora il problema di
reset dei controlli erratti credo sia l'ultima cosa che mi resta per
concludere.
I controlli (ora so una cosa nuova) sono quelli del codice che hai
scritto tu newpassword e newpasswordverifye si trovano nella maschera
frm_ChangePassword
quindi avrei fatto così ma con scarsi risultati
If newpasswordverify = False then
Me.newpasswordverify = ""
End if
Ciao

 - Mostra testo citato -
Ciao,
il codice gira nella maschera e non nel modulo ora il problema di
reset dei controlli erratti credo sia l'ultima cosa che mi resta per
concludere.
I controlli (ora so una cosa nuova) sono quelli del codice che hai
scritto tu newpassword e newpasswordverifye si trovano nella maschera
frm_ChangePassword
quindi avrei fatto cos� ma con scarsi risultati
If newpasswordverify = False then
Me.newpasswordverify = ""
End if
Ciao
-------------------------------------
Immagino che la form contenga anche un pulsante OK. E' su click di questo 
pulsante che potresti fare la verifica.
If StrComp(Me.newpassword , Me.newpasswordverifye, vbBinaryCompare) = 0 then
msgbox "Password Accettata"
Else
msgbox "Le password inserite non sono uguali, riprovare."
Me.newpasswordverifye = ""
Me.newpassword = ""
Me.newpassword.setfocus
End if
Immagino che i controlli siano tre: VecchiaPassword, NuovaPassword e 
PasswordDiVerifica.
Anche il confronto tra vecchia e nuova password va implementato:
If StrComp(Me.Oldpassword , Me.newpassword, vbBinaryCompare) = 0 then
msgbox "Vecchia e nuova password sono uguali, riprovare"
Me.newpassword = ""
Me.Newpassword.SetFocus
End if
In pratica: l'utente inserisce vecchia, nuova e verifica password; tu fai il 
controllo sulla complessit� della password nuova, la confronti con la 
vecchia per vedere se � identica, infine la confronti con la verifica 
affinch� sia identica.
Ora hai tutti gli elementi per proseguire da solo.
Ciao, Carlo 

 For Next nI
potrebbe diventare
For nI = 1 To Len(strC)
    Select Case Asc(Mid(strC, nI, 1))
        'cifra
        Case 48 To 57
            blnN = True
        'carattere speciale
        Case 33 To 47, 58 To 64, 91 To 96, 123 To 126
            blnX = True
    End Select
    If blnN And blnX Then Exit For
Next nI
' maiuscola e minuscola e lettera
If StrComp(strC, UCase(strC), vbBinaryCompare) <> 0 _
    And StrComp(strC, LCase(strC), vbBinaryCompare) <> 0 Then
    blnC = True
End If
-- 
cu


Ciao grazie a voi ho risolto. ora l'ultomo problema di resett capo in
caso di errore lo ho nel controllo di congruità tra la vecchia
password registrata in tabella e quella digitata nella form
changepassword ho provato ad aggiungere me.oldpassword = "" ma in
questo caso non funziona incollo la porzione di codice nella speranza
di non avervi stressato
Private Sub oldpassword_BeforeUpdate(Cancel As Integer)
'' routine che controlla l'ugualianza della password
'' realizzata per il controllo sull'utilizzo maiuscole e minuscole
   Dim retValue As Integer
   Dim oldpassword As String
   Dim Confronto As String
   oldpassword = Me.oldpassword
  Confronto = DLookup("Password", "Tbl_utenti", "Utente = """ & Forms!
mascher4!utente & """")
If StrComp(oldpassword, Confronto, vbBinaryCompare) <> 0 Then
   Me.oldpassword.Undo
   Cancel = True
   Dim strTtl As String
   strTtl = "PASSWORD"
   strMsg = "ATTENZIONE, la password corrente non è corretta, vuoi
riprovare?"
   retValue = MsgBox(strMsg, vbCritical + vbYesNo, strTtl)
   Select Case retValue
      Case vbNo
           DoCmd.Close
   End Select
   End If
End Sub

>     'anche il carattere � presente

oppure cosi, che forse � pi� comprensibile:
For i = 1 To Len(pass)
  If InStr("0123456789", Mid(pass, i, 1)) > 0 Then
        blnN = True
  End If
  If InStr("!@#$%^&*()_+=|�/?�����٧.:,;�\""", Mid(pass, i, 1)) > 0 Then
        blnX = True
  End If
   If InStr("abcdefghilmnopqrstuvwxyz", Mid(pass, i, 1)) > 0 Then
         blnMin = True
For ii = Asc("A") To Asc("Z")
if InStr(ii, Asc(Mid(pass, i, 1)))>0 then
       blnMaiu = True
End if
Next ii
Next i
-- 
Ciao
Geppo

 ha scritto nel messaggio 
news:20fff3fd-fd08-47c0...@j24g2000yqa.googlegroups.com...
Ciao grazie a voi ho risolto. ora l'ultomo problema di resett capo in
caso di errore lo ho nel controllo di congruit� tra la vecchia
password registrata in tabella e quella digitata nella form
changepassword ho provato ad aggiungere me.oldpassword = "" ma in
questo caso non funziona incollo la porzione di codice nella speranza
di non avervi stressato
ma questa � scritta correttamente?
.....""" & Forms!mascher4!utente & """")
-- 
Ciao
Geppo 

 Geppo
ciao geppo,
se ti riferisci a questa porzione di codice esegue perfettamente la
sua funzione e direi che è corretto, quale errore ci leggi?


 Next i
-- 


> Next i
-- 
Ciao
Geppo 

mascher4!utente & """")
mi riferivo al nome della form si chiama proprio cosi?
mascher4
-- 
Ciao
Geppo

 Geppo
ciao geppo si si chiama proprio così :-)