|
Ob als Testdaten oder als Passwörter: Strings, die aus einer
zufällig erzeugten Zeichenfolge bestehen, werden Sie immer brauchen
können. Die Erzeugung einer zufälligen Zahl aus einem vorgegebenen
Bereich ist mittels der Visual Basic-Funktion Rnd
nicht sonderlich schwierig. Der in Visual Basic eingebaute
Zufallszahlengenerator wird zunächst mit der Anweisung Randomize
und irgend einem beliebigen Wert (wir nehmen den Rückgabewert der Timer-Funktion)
initialisiert, damit er nicht immer die gleiche Zufallsfolge
liefert. Anschließend wird nach der folgenden Formel (siehe auch "Wie
der Zufall es will") eine Zufallszahl im
gewünschten Bereich ermittelt:
Zufallszahl = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Für einen Zufalls-String benötigen wir nun aus dem Bereich der
möglichen Zeichen-Codes (0 bis 255 - Unicode-Zeichen
lassen wir hier einmal außen vor) für jedes Zeichen entsprechend
der gewünschten Länge eine solche Zufallszahl. Doch nicht immer
ist es sinnvoll, jedes beliebige Zeichen zuzulassen, sondern etwa
nur "echte" Ascii-Zeichen (7-Bit,
Zeichen-Codes 0 bis 127), oder nur Ziffern, oder nur
Zeichen aus dem einfachen Alphabet (A bis Z), und
gegebenenfalls nur Groß- oder Kleinbuchstaben.
Die Funktion RndString liefert Ihnen solchermaßen spezifizierte
Zufalls-Strings. Sie geben im ersten Parameter die gewünschte
Länge an. In den folgenden optionalen Parametern legen Sie fest,
aus welchem Bereich die Zeichen "gezogen" werden sollen (CharTypes),
ob es nur Groß- oder Kleinbuchstaben oder auch gemischte Folgen
sein sollen (CharCases), und ob der Zufalls-String auch Leerzeichen
enthalten darf (IncludeSpace).
Public Enum RndCharTypeConstants
rntAll
rntAll7Bit
rntAlpha
rntNumeric
rntAlphaNumeric
End Enum
Public Enum RndCharCaseConstants
rncMixed
rncLCase
rncUCase
End Enum
Public Function RndString(ByVal Length As Long, _
Optional ByVal CharTypes As RndCharTypeConstants, _
Optional ByVal CharCases As RndCharCaseConstants, _
Optional ByVal IncludeSpace As Boolean) As String
Dim nRndString As String
Dim nAsc As Integer
Dim i As Integer
If Length <= 0 Then
Exit Function
End If
nRndString = Space$(Length)
Randomize Timer
Select Case CharTypes
Case rntAll
If IncludeSpace Then
For i = 1 To Length
nAsc = Int(224 * Rnd + 32)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Else
For i = 1 To Length
nAsc = Int(223 * Rnd + 33)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
End If
Case rntAll7Bit
If IncludeSpace Then
For i = 1 To Length
nAsc = Int(96 * Rnd + 32)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Else
For i = 1 To Length
nAsc = Int(96 * Rnd + 32)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
End If
Case rntAlpha
Select Case CharCases
Case rncMixed
For i = 1 To Length
Do
nAsc = Int(58 * Rnd + 65)
Select Case nAsc
Case 65 To 90, 97 To 122
Exit Do
End Select
Loop
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Case rncLCase
For i = 1 To Length
nAsc = Int(26 * Rnd + 97)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Case rncUCase
For i = 1 To Length
nAsc = Int(26 * Rnd + 65)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
End Select
Case rntNumeric
For i = 1 To Length
nAsc = Int(10 * Rnd + 48)
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Case rntAlphaNumeric
Select Case CharCases
Case rncMixed
For i = 1 To Length
Do
nAsc = Int(75 * Rnd + 48)
Select Case nAsc
Case 48 To 57, 65 To 90, 97 To 122
Exit Do
End Select
Loop
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Case rncLCase
For i = 1 To Length
Do
nAsc = Int(75 * Rnd + 48)
Select Case nAsc
Case 48 To 57, 97 To 122
Exit Do
End Select
Loop
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
Case rncUCase
For i = 1 To Length
Do
nAsc = Int(53 * Rnd + 48)
Select Case nAsc
Case 48 To 57, 65 To 90
Exit Do
End Select
Loop
Mid$(nRndString, i, 1) = Chr$(nAsc)
Next
End Select
End Select
RndString = nRndString
End Function
|