IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - VB: Zufallsstrings erstellen



VB: Zufallsstrings erstellen

Eine kleine VB-Funktion, die Zufallstrings zurückgibt.


Autor: Patrick Bucher (paedubucher)
Datum: 07-11-2004, 20:11:10
Referenzen: keine
Schwierigkeit: Fortgeschrittene
Ansichten: 10886x
Rating: 8 (1x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Zufallsstring erstellen

Wer schon einmal einen Algorithmus zur Bearbeitung von Strings geschrieben hat, der benötigt auch Strings, um seinen Algorithmus zu testen. Nun kann man diese Teststrings selber erstellen, oder man schreibt (bzw. benützt) eine Funktion, welche zufällige Strings erzeugt.

Die erste Methode birgt aber einige Nachteile:
  1. Die Methode nimmt auf Dauer sehr viel Zeit in Anspruch, da man logischerweise für jeden Testlauf einen anderen String verwenden sollte.
  2. Wenn ein Programmierer seinen eigenen Algorithmus testet, ist er von Natur aus sehr gutmütig - so wird er z.B. nur Strings ohne Sonderzeichen benützen...
Eine kleine Funktion spart Zeit beim Erstellen der Strings. Außerdem kann man davon ausgehen, dass der Zufallszahlengenerator sich allen möglichen Zeichen bedient.

Die Funktion kann z.B. auch dafür eingesetzt werden, um Passwörter zu generieren.

Der ANSI-Zeichensatz

Der ANSI-Zeichensatz beinhaltet 32 Steuer- und 224 druckbare Zeichen. Die Zeichen 0 bis 31 sind Steuerzeichen. Die Großbuchstaben haben die Werte 65 bis 90, die Kleinbuchstaben besetzen die Werte 97 bis 122. Die restlichen Zeichencodes sind Sonderzeichen.
Dieser Zeichensatz kann von Sprache zu Sprache variieren, der Code geht aber immer von 0 bis 255.

Der Visual Basic Zufallszahlengenerator

Bei jeder Hochsprache (Irrtümer vorbehalten) gibt es eine Funktion, welche Zufallszahlen berechnen kann. Dazu wird oft die aktuelle Uhrzeit bzw. das Datum zur Hilfe genommen - es gibt also keine "echten" Zufallszahlen.
Für unsere Zwecke sollten diese Pseudo-Zufallszahlen jedoch ausreichen.

Für Visual Basic stehen zwei Funktionen zur Verfügung, die sich mit den Zufallszahlen auseinandersetzen, sie heißen rnd, bzw. Randomize.

Die Funktion rnd gibt eine Zufallszahl zwischen 0 und 1 zurück (natürlich mit Kommastellen). Durch Multiplikation kann man jedoch jede beliebige Zahl daraus machen. So berechnet man z.B. eine Zufallszahl von 1 bis 100:

Zahl = Int(rnd * 99 + 1)
Im Innern der Klammern wird zuerst die Funktion rnd() aufgerufen, die eine Zufallszahl zurückgibt. Danach wird diese mit 99 multipliziert. Es kann nun also eine Zahl zwischen 0 und 99 sein. Nach der Addition mit 1 bekommt die Variable "Zahl" einen Wert zwischen 1 und 100.
Die Funktion Int() stellt sicher, dass nur der ganzzahlige Teil des Ausdrucks übernommen wird.

Die Funktion Randomize() übernimmt eine andere Aufgabe. Sie initialisiert den Zufallszahlengenerator neu. Wenn der Generator nicht explizit initialisiert wird, so wird er innerhalb einer bestimmten Zeitperiode immer die gleiche Folge an Zufallszahlen erstellt.

Aufbau der Funktion

Funktionskopf:

Unsere Funktion soll einen String erstellen, also geben wir auch einen solchen zurück. Die Funktion hat also den Datentyp "String".

Es wäre nützlich, wenn man einen Zufallsstring beliebiger Länge erstellen könnte. Also übergeben wir die Länge als Parameter.

Weiter wäre es ganz nützlich, wenn man Strings nur aus Buchstaben oder aus allen druckbaren Zeichen erstellen könnte. Bei Buchstabenstrings sollten wir auch zwischen Groß- und Kleinschreibung auswählen können. Dieser Parameter wird aber nur benötigt, wenn der Benutzer einen nur-Buchstaben String will. Machen wir ihn also optional und setzten ihm einen Standardwert.

Der Funktionskopf sollte also laut diesen Aussagen ungefähr so aussehen:
  1. Public Function Zufallsstring _
  2. ( _
  3. lngLaenge As Long, _
  4. blnNurBuchstaben As Boolean, _
  5. Optional blnGross As Boolean = False _
  6. ) _
  7. As String
Erklärungen
  1. Die Funktion ist öffentlich und heißt "Zufallsstring"/li>
  2. Beginn der Parameterliste
  3. Der erste Parameter, der die Länge angibt. Er hat den Datentyp Long (man sollte bei der Verwendung aber nicht das ganze Potential ausschöpfen ;-) )
  4. Dieser Parameter gibt an, ob der String nur aus Buchstaben bestehen soll.
  5. Der Parameter "blnGross" ist nur optional, da er nur bei "Buchstaben-Only"-Strings zum Einsatz kommt. Er ist standardmäßig false.
  6. Ende der Parameterliste
  7. Die Funktion soll später einen String zurückgeben.
Welche Zeichencodes werden benötigt?

Nun wissen wir zwar, was der Funktionsaufrufende in etwa will - aber noch nicht, um welche ANSI-Codes es sich tatsächlich handelt.

Die Zeichen von 0 bis 31 sind Steuerzeichen und fallen von daher ganz weg.

Wenn also der Parameter "blnNurBuchstaben" = false ist, dürfen wir alle Codes von 32 bis 255 verwenden! Wenn der Parameter aber = true ist, dürfen wir nur Buchstaben verwenden. Nun muss auch noch der Parameter "blnGross" beachtet werden. Wenn dieser = true ist, dann verwenden wir die Codes von 97 bis 122 - ansonsten 65 bis 90.

Wir können nun also die Grenzwerte der Codes feststellen. In Programmcode kann das nun ungefähr so aussehen
  1. Dim bytAnfang As Byte
  2. Dim bytEnde As Byte
  3. If blnNurBuchstaben = False Then
  4. bytAnfang = 32
  5. bytEnde = 255
  6. Else
  7. If blnGross = True Then
  8. bytAnfang = 65
  9. bytEnde = 90
  10. Else
  11. bytAnfang = 97
  12. bytEnde = 122
  13. End If
  14. End If
Erklärungen
  1. Variable, welche den ersten Code darstellt (byte geht von 0-255, also perfekt geeignet)
  2. Diese Variable stellt den letzten verwendbaren Code dar.
  3. Wenn es sich nicht nur um Buchstaben handeln soll
  4. Von Character 32
  5. Bis Character 255
  6. Wenn es sich nur um Buchstaben handeln soll
  7. Wenn es nicht nur Großbuchstaben sein müssen
  8. Von Character 65
  9. Bis Character 90
  10. Wenn es Grossbuchstaben sein müssen
  11. Von Character 97
  12. Bis Character 122
Danach werden die beiden If-Blöcke noch abgeschlossen.

Verkettung des Zufallstrings

Nun benötigen wir den Zufallszahlengenerator. Dieser soll am Anfang initialisiert werden.

Mit der rnd-Funktion können wir jeweils nur einen Character berechnen. Wir müssen ihn also innerhalb einer Schleife berechnen lassen. Diese wird von 1 bis zum Parameter lngLaenge durchlaufen.

Bei jedem Character soll eine Zufallszahl von bytAnfang bis bytEnde berechnet werden. Der Zeichencode des Characters hat einen bestimmten Intervall. Dieser beträgt (bytEnde - bytAnzahl) - also die Differenz zwischen Ende und Anfang. Damit aber die Zufallszahlen am richtigen Ort beginnen, muss er um bytAnfang erhöht werden. Der zufällige Character-Code wird also zusammengefasst so berechnet:

(Rnd * (bytEnde - bytAnfang)) + bytAnfang
Nun haben wir den Code - dieser muss aber in einen Character umgewandelt werden. Dazu können wir die Funktion Chr() verwenden.

Mit dem Rückgabewert der Funktion Chr() können wir nun den Zufallsstring verketten, dieser wird bei jedem Schleifendurchlauf um einen Character länger.

Der Programmcode
  1. Dim n As Long
  2. Dim bytCurChar As Byte
  3. Randomize
  4. For n = 1 To lngLaenge Step 1
  5. bytCurChar = (Rnd * (bytEnde - bytAnfang)) + bytAnfang
  6. Zufallsstring = Zufallsstring & Chr(bytCurChar)
  7. Next n
Erklärungen
  1. Schleifenzähler
  2. Zufallszeichencode
  3. Initialisiert den Zufallszahlengenerator
  4. Der String soll die Länge "lngLaenge" haben - pro Schleifendurchlauf wird ein Character angehängt
  5. Der aktuelle Zeichencode wird als Zufallszahl berechnet
  6. Der Zufallsstring wird mit dem berechneten Character verkettet
  7. Ende der Schleife
Am Schluss muss noch die Funktion mit folgendem Statement abgeschlossen werden.

End Function
Nun noch einmal die gesamte Funktion im Überblick (alle Variablen wurden am Anfang initialisiert).

Public Function Zufallsstring _
(	lngLaenge As Long, _
    blnNurBuchstaben As Boolean, _
    Optional blnGross As Boolean = False) _
As String

    Dim bytAnfang As Byte
    Dim bytEnde As Byte
    Dim n As Long
    Dim bytCurChar As Byte
        
    If blnNurBuchstaben = False Then
        bytAnfang = 32
        bytEnde = 255
    Else
        If blnGross = True Then
            bytAnfang = 65
            bytEnde = 90
        Else
            bytAnfang = 97
            bytEnde = 122
        End If
    End If
    
    Randomize
    For n = 1 To lngLaenge Step 1
        bytCurChar = (Rnd * (bytEnde - bytAnfang)) + bytAnfang
        Zufallsstring = Zufallsstring & Chr(bytCurChar)
    Next n

End Function


paedubucher
Professonial
Beitrag vom:
04-01-2008, 11:58:30

Die Sache mit dem Passwörter generieren

Die Funktion sollte nicht wirklich für die Erstellung von Passwörtern verwendet werden, da der VB-Pseudozahlengenerator recht vorhersehbare Ergebnisse liefern wird.

-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06243
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1142
Comments: 0