Clever-Excel-Forum

Normale Version: Passwort aus Zahlen und Buchstaben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3

26865

(08.09.2022, 08:16)EarlFred schrieb: [ -> ]
Code:
Option Explicit

Function chkPwd2(ByVal Password As String) As Boolean
Dim i As Byte
Dim CheckSum As Byte

If Len(Password) >= 6 Then
   CheckSum = 16
   For i = 1 To Len(Password)
      Select Case AscW(Mid(Password, i, 1))
         Case 48 To 57                 '0-9
            CheckSum = CheckSum Or 1
         Case 65 To 90                 'A-Z
            CheckSum = CheckSum Or 2
         Case 97 To 122                'a-z
            CheckSum = CheckSum Or 4
         Case Else
            CheckSum = CheckSum Or 8
      End Select
   Next i
End If
chkPwd2 = CheckSum = (1 Or 2 Or 4 Or 16)
End Function
Ich Dussel habe die Prüfung auf mind. 6 Zeichen vergessen. Eingebaut.

Noch ein letzter: Code mit Rückgabe, welche der Regeln missachtet wurden:
Code:
Function chkPwd3(ByVal Password As String) As String 'Boolean
Dim i As Byte
Dim CheckSum As Byte

CheckSum = IIf(Len(Password) >= 6, 16, 0)
For i = 1 To Len(Password)
   Select Case AscW(Mid(Password, i, 1))
      Case 48 To 57                 '0-9
         CheckSum = CheckSum Or 1
      Case 65 To 90                 'A-Z
         CheckSum = CheckSum Or 2
      Case 97 To 122                'a-z
         CheckSum = CheckSum Or 4
      Case Else
         CheckSum = CheckSum Or 8
   End Select
Next i

chkPwd3 = "Passwort"
If (CheckSum And 1) = 0 Then chkPwd3 = chkPwd3 & " und enthält keine Ziffern"
If (CheckSum And 2) = 0 Then chkPwd3 = chkPwd3 & " und enthält keine großen Buchstaben"
If (CheckSum And 4) = 0 Then chkPwd3 = chkPwd3 & " und enthält keine kleinen Buchstaben"
If (CheckSum And 8) = 8 Then chkPwd3 = chkPwd3 & " und enthält unzulässige Zeichen"
If (CheckSum And 16) = 0 Then chkPwd3 = chkPwd3 & " und ist kürzer als 6 Zeichen"
If chkPwd3 = "Passwort" And CheckSum = (1 Or 2 Or 4 Or 16) Then
   chkPwd3 = chkPwd3 & " ist gültig"
Else
   chkPwd3 = Replace(chkPwd3, " und", "", 1, 1)
End If
End Function
Moin allerseits,

es ist toll, dass es jetzt  hier solche eine rege Beteiligung und gute Lösungen gibt. Schade ist nur, dass Centurio, der ja ausdrücklich um einen Einstieg gebeten hatte, jetzt sich gar nichts mehr selbst erarbeiten/lernen kann, sondern nur noch Cut'nPaste braucht ...

Den Hinweis mit Unicode-Ersatzzeichen, finde ich klasse, weil er in anderen Passwort-Szenarien bestimmt zur Sicherheit beiträgt, die es in der  XL/VBA-Welt -wie schon erwähnt- nicht wirklich gibt. In meinem persönlichen Archiv habe ich Arbeitsmappen und Beschreibungen mit rund einem halben Dutzend Hintertürchen, um (mit einigen sogar unbemerkt) an PW-geschützte Daten zu gelangen.

@EarlFred: Eine Frage noch: Du verpackst die Prüfungen in Functions statt in Subs. Hat das einen tieferen Grund?

Grüße

26865

(08.09.2022, 13:52)d'r Bastler schrieb: [ -> ]@EarlFred: Eine Frage noch: Du verpackst die Prüfungen in Functions statt in Subs. Hat das einen tieferen Grund?
Es dient der Übersichtlichkeit des Codes, der Wiederverwendbarkeit, der einfachen Wartung.

In der eigentlichen Prozedur liegt dann nicht mehr der ganze Code zur Prüfung, sondern nur noch der Aufruf und die Auswertung der Rückgabe der Function. 
Brauchst du diese Funktionalität in einem anderen Projekt, bindest du die Function nur noch ein. 
Weiterhin könntest du die Function auch als UDF (unter Beachtung der Limitationen von UDFs) verwenden. 
Und nicht zuletzt lassen sich Funktionen auch gut in AddIns (xlam) sammeln, um sie mappenübergreifend nutzen (und updaten) zu können.
Hi Bastler,

eine Function wird immer dann verwendet, wenn man einen Rückgabewert braucht.

Hier gibt die Funktion chkPwd2 einfach True oder False zurück, je nachdem ob Ok oder nicht. Im Hauptprogramm kann dann entsprechend reagiert werten:

PHP-Code:
If chkPwd3(EingegebenesPasswortThen
    MsgBox
("Passwort OK")
Else
    MsgBox("Passwort nicht OK")
End If 

chkPwd3 gibt gleich einen entsprechenden Stringwert, der direkt verwendet werden kann:
PHP-Code:
MsgBox chkPwd3(EingegebenesPasswort

Bei einem PasswortCheck ist es idR besser diesen als Funktion zu programmieren. Du kämest ja wahrscheinlich auch nicht auf die Idee so etwas wie IstBlau() als Sub zu programmieren.
Mahlzeit!
Der auswertbare Rückgabewert ist doch das Entscheidende.
Mittels CVErr()-Function kann man das sogar so gestalten, dass keine MsgBox notwendig ist.  21

Gruß Ralf

26865

(08.09.2022, 14:20)HKindler schrieb: [ -> ]eine Function wird immer dann verwendet, wenn man einen Rückgabewert braucht.
(Mehrere) Rückgabewerte sind auch mit Subs möglich. Auch Kombinationen sind möglich. 

Beispiele:
Code:
Option Explicit

Sub test()
Dim Wort As String: Wort = "Hallo"
Call machwas(EinUndAusgabe:=Wort)
MsgBox Wort

Dim Fehler As String
Dim Ergebnis As Double
Ergebnis = machWasAnderes(Zähler:=7, Nenner:=0, ReturnedError:=Fehler)
If Fehler <> "" Then
   MsgBox Fehler
Else
   MsgBox Ergebnis
End If
End Sub

Sub machwas(ByRef EinUndAusgabe As String)
EinUndAusgabe = Replace(EinUndAusgabe, "a", "e")
End Sub

Function machWasAnderes(ByVal Zähler As Integer, ByVal Nenner As Integer, ByRef ReturnedError As String) As Double

On Error GoTo ErrExit
machWasAnderes = Zähler / Nenner

Exit Function

ErrExit:
ReturnedError = "Fehler!" & vbLf & Join(Array(Err.Number, Err.Description), ": ")
machWasAnderes = 0
End Function
Halli Hallo zusammen

Danke vielmals für eure Hilfe, Inputs, Vorschläge und Codes :)
Ich werde mir alles in Ruhe anschauen und ausprobieren.

Ich lege schon Mal Kreuz, Hammer und Nägel für meine nächste Frage bereit, falls mich jemand ans Kreuz nageln will  05

Ich kenne mich mit Funktionen überhaupt nicht aus und ich habe den Unterschied zum Sub noch nicht ganz verstanden, aber da bin ich eigen und der Groschen wird dann irgendwann auch bei mir bei einem praktischen Beispiel fallen.

Ich lege den Code dieser Funktion in ein Modul ab und werde den wohl in meiner UserForm einen Bezug zum Modul resp. zur Funktion erstellen müssen? 17
Beim Sub (witzig Autokorrektur schreibt immer "Pub", ja da wäre ich auch gerne   19 ) geht das ja über "Call".

LG Primo
Hi,

(08.09.2022, 15:38)EarlFred schrieb: [ -> ](Mehrere) Rückgabewerte sind auch mit Subs möglich. Auch Kombinationen sind möglich.
Variablen ByRef zu übergeben hat aber auch so seine Tücken. So ist z.B. eine automatische Typumwandlung nicht mehr gegeben.

Wenn man denn unbedingt auf Function verzichten will, dann könnte man auch globale Variablen verwenden. Aber beides (ByRef und globale Variablen) trägt mMn. nicht wirklich zu übersichtlichem Code bei.

@Prime Centurio: Functions werden so verwendet wie jede VBA-Funktion wie z.B. Int oder UCase
PHP-Code:
Sub t()
dim s
"Test"
MsgBox s
testFun(s)
MsgBox s
MsgBox testFun
(s)
End Sub

Function testFun(Str As String) As String
TestFun 
Str Str
end 
Function 
Moin Centurio, 
ganz großes Kino:

Zitat:... im Sub (witzig Autokorrektur schreibt immer "Pub", ja ....


Pub?! In welchem Editor schreibst Du?? Falls nicht VBE, vergibst Du Dir unendlich viele kleine Hilfen für korrektes Coden.
Was ist der VBE? Der Visual Basic Editor in Office-Produkten, direkt aufzurufen über Alt+F11 oder Alt+F8 zur Auswahl des zu bearbeitenden Makros.
Auch wenn's jetzt staubtrocken klingt, aber dort gibt es definitiv keinen Pub, es sei denn Du schreibst Dir einen ...  15

Moin Forumskollegen,

das mit der Function wegen Rückgabewert, wusste ich und glaubte es auch verstanden zu haben. Den sicher großen Vorteil des Auslagerns hatte ich allerdings noch nicht erkannt. Bisher habe ich das mit Sub + Parameter hin und zurück gelöst. Auch von einer Datei zur nächsten, siehe Anhang.

Herzlichen Dank für diesen kleinen Grundkurs!! Wieder was gelernt!   Smile

Grüße
[attachment=44992] Beide Dateien müssen geöffnet sein.

26865

(08.09.2022, 20:06)HKindler schrieb: [ -> ]Variablen ByRef zu übergeben hat aber auch so seine Tücken. So ist z.B. eine automatische Typumwandlung nicht mehr gegeben.
Ich bin ohnehin kein Freund von automatischen Typecasts, daher wäre das kein Verlust. Typgenaue Übergaben von Argumenten gehören m. E. auch zu sauberer Programmierung.
Seiten: 1 2 3