version=1.0.1 vdate=04.09.2019 fname=udf_rndstring.bas ns=%NAMESPACE% fpath=/vba/functions ====== [VBA] rndString() ====== //Stellt aufgrund eines Patterns ein Zufallstext zusammen. zB. für ein Passwortgenerator// ==Version %%version%% - %%vdate%%== {{%%ns%%:%%fname%%|Download %%fname%% (V-%%version%%)}} ===== Definition ===== String = rndString(pattern) '/** ' * Erstellt ein Zfallswerd gemäss Patterndefinition ' * @example rndString("L(a{10}[\#\_\-\|])") -> fo2kvnx1#c8z725 ' * @param String Pattern ' * @return String ' */ Public Function rndString(ByVal iPattern As String) As String ==== Patterns ==== Die Anwendungen findest du in den Beispielen === Zeichenpattern === ***a** Lower-Case Alphanumeric ''abcdefghijklmnopqrstuvwxyz 0123456789'' ***A** Mixed-Case Alphanumeric ''ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789'' ***U** Upper-Case Alphanumeric ''ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789'' ***d** Digit ''0123456789'' ***h** Lower-Case Hex Character ''0123456789 abcdef'' ***H** Upper-Case Hex Character ''0123456789 ABCDEF'' ***l** Lower-Case Letter ''abcdefghijklmnopqrstuvwxyz'' ***L** Mixed-Case Letter ''ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz'' ***u** Upper-Case Letter ''ABCDEFGHIJKLMNOPQRSTUVWXYZ'' ***p** Punctuation '',.;:'' ***b** Bracket ''()[]{}<>'' ***s** Printable 7-Bit Special Character ''!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'' ***S** Printable 7-Bit ASCII ''A-Z, a-z, 0-9, !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'' === Steuerpattern === ***[...]** Mehrfachauswahl. Eines der Pattern davon wird verwendet ***{#}** Anzahl Zeichen ***{#,#}** Mindestens und Maximal Anzahl Zeichen ***(...)** Alle Patterns innerhalb der Klammern kommen vor. Die Reihenfolge wird gemischt ***\** Das folgende Zeichen ist kein Pattern sondern das Zeichen selber ***^*** Das folgende Zeichen/Pattern wird von vorgehenden Pattern abgezogen. ''a^d'' entspricht somit dem ''l'' ===== Beispiele ===== Einfache Beispiele. '5 Zeichen aus dem Sortiment a-zA-Z0-9 ?rndString("A{5}") V6lfN 'Im Vergleich dazu, 5 mal den Buchstaben a ?rndString("\a{5}") aaaaa '5 Zeichen, die entweder ein Punkt- oder ein Klammerzeichen oder ein Kleinbuchstabe sind ?rndString("[pbl]{5}") f>;g( 'dasselbe, aber mindestesn 4 Zeichen, maximal 10 Zeichen ?rndString("[pbl]{4, 10}") {}m>,>ion] Zusammengesetzt Pattern 'Ein Buchstabe (Gross und Klein). gefolgt von 2 Ziffern. 'Dann ein Satzzeichen oder ein Klammerzeichen und zum Schluss nochmals ein Buchstaben ?rndString("Ld{2}[pb]L") z06[z 'dasselbe. Aber abgeseehn vom ersten Zeichen ist der Rest in () gefasst und wird somit wild gemischt ?rndString("L(d{2}[pb]L)") r.R76 Zeichen aus einem Pattern ausschliessen mit ^ '16 Ziffern ohne die 0 ?rndString("d^\0{16}") 6719115112343998 '10 Sonderzeichen ohne Klammern und Punkte ?rndString("s^[pb]{10}") %*"|?+'`=& Und noch ein nützliches Beispiel. 'Ein Passwort. Beginnt mit einem Buchstaben. 'Dann kommt ein Teil, bestehend aus 8 Buchstaben+Zahlen und 2 Sonderzeichen ohne Punkte und Klammern. ?rndString("L(a{8}s^[pb]{2})") C$zr%i6z3md ===== Code =====