PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB.net Problem mit Code.



Bobby35
06.09.2010, 20:35
Hallo F-H,

ich habe ein Problem. Und zwar ich hab mir nen Passwort generator in VB.net mit Hilfe eines Freundes geschrieben. Nur wenn ich mir dass Passwort generieren möchte nimmt er nur die Zahlen und davon auch z.B. nur die 5. Nach einem Weiteren Test gingen nur die Kleinbuchstaben. Nach einen weiteren Test gingen nur die Großbuchstaben. (habe Zahlen sowie Klein & Großbuchstaben als Auswahl genommen)

Kann mir jemand sagen was des Problem is?


Programm zum Coden: Mircosoft Visual Basic 2010 Express

Code:




Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

TextBox1.Text = TextBox1.Text.Trim
If CheckBox1.Checked = False And CheckBox2.Checked = False And CheckBox3.Checked = False Then
MessageBox.Show("Du musst mindestens eine Methode auswählen um dein Passwort zu generieren", "Warnung", MessageBoxButtons.OK)
End If
If Val(NumericUpDown1.Text) < 3 Then
MessageBox.Show("Du brauchst eine Minimumlänge von 3.", "Warnung", MessageBoxButtons.OK)
Exit Sub
End If
If Val(NumericUpDown1.Text) > 100 Then
MessageBox.Show("YOUR Dein Passwart darf nur zwischen 3 - 100 Zeichen lang sein.", "Warnung", MessageBoxButtons.OK)
Exit Sub
End If


TextBox1.Text = GenerateCode()


End Sub


Public Function GenerateCode()

Dim intRnd As Integer
Dim intStep As Integer = Nothing
Dim strname As String
Dim intlength As Integer
Dim strinputstring As String = ""
Dim Zahlen As String = "1234567890"
Dim Kleinbuchstaben As String = "abcdefghijklmnopqrstuvwxyz"
Dim Großbuchstaben As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim intnamelength As String = 1



If CheckBox1.Checked Then strinputstring &= Zahlen
If CheckBox2.Checked Then strinputstring &= Kleinbuchstaben
If CheckBox3.Checked Then strinputstring &= Großbuchstaben




intlength = Len(strinputstring)


Integer.Tryparse(NumericUpDown1.Text, intlength)

Randomize()


strname = ""


For inStep = 1 To intlength


intRnd = Int(Rnd() + intlength) + 1


strname = strname & Mid(strinputstring, intRnd, 1)


Next


Return strname




End Function
End Class




lg
Bobby

Kid Icarus
06.09.2010, 20:38
Benutz mal Syntax-Highlight (nopaste)
So ist es eine Qual es zu lesen.

novedad
06.09.2010, 20:40
setz das bitte erstmal in einen Code-Tag, kriegt man ja Augenkrebs von ;)

Bobby35
06.09.2010, 20:42
Benutz mal Syntax-Highlight (nopaste)
So ist es eine Qual es zu lesen.

irgendwie versteh ich des nich :D wie benutz ich des? :D sry ich kenn mich damit kaum aus

/E: ja okay ist im Code Tag :P

blackberry
06.09.2010, 20:46
intlength = Len(strinputstring)


Integer.Tryparse(NumericUpDown1.Text, intlength)

Willst du da nicht irgendwo intnamelength verwenden? Weil so macht das keinen Sinn.

Bobby35
06.09.2010, 20:47
wo setz ich das dann rein? mein freund weiß da grad auch nich weiter :D

inout
06.09.2010, 20:53
Hast du dir mal angesehen was rnd() genau macht?
Tue dieses und du weisst, wieso es nicht funktioniert.

Du brauchst System.Random und Next().
Zudem reicht es randomize() 1x beim Programmstart aufzurufen.

Btw: Parameter können auch manchmal recht nützlich sein.

sollte es evtl. so aussehen?



Int(Rnd() * intlength) + 1

Bobby35
06.09.2010, 20:54
okay das versteh ich jetz nich mehr :D mein freund is grad kurz was zu essen holn :D den frag ich dann mal..:D


danke bisher :)

blackberry
06.09.2010, 21:00
Das setzt du nirgendwo rein -.-

Nur ich fasse mal zusammen:
intlength = Len(strinputstring)
^-- hier wird intlength auf die Länge des Zeichensatzes gesetzt (hättest du also nur Zahlen ausgewählt wäre das beispielsweise 10).

Danach:
Integer.Tryparse(NumericUpDown1.Text, intlength)
^-- hier setzt du intlength wohl auf die Länge die du für das Passwort ausgewählt hast.

Eins von beiden hätte wohl intnamelength, statt intlength heißen sollen. Zumindest macht es halt so wie es jetzt ist keinen Sinn, da du zweimal eine Variable änderst, ohne etwas mit dem ersten Wert anzufangen.

For inStep = 1 To intlength
^-- das ist die Schleife, die dann ein intlength-stelliges (oder intlength-1? Kenne mich mit VB nicht aus... reime mir das nur aus diesem Codewirrwar zusammen) Passwort generieren soll.

intRnd = Int(Rnd() + intlength) + 1
^-- Hier generierst du dir den Index des Zeichens, das du als nächstes zum PW hinzufügst. So wie du aber versuchst den Index zu generieren, macht das keinen Sinn.
Laut MSDN (http://msdn.microsoft.com/en-us/library/f7s023d2%28VS.80%29.aspx) verhält sich Rnd wie folgt, wenn man keinen Parameter angibt:
Es wird eine Zahl aus dem halb-offenen Intervall [0;1) zurückgegeben.
Da Int() immer ABRUNDET heißt das:
intlength <= Rnd() + intlength < intlength + 1
Somit ist das Ergebnis des Ausdrucks "Int(Rnd() + intlength) + 1" KONSTANT - und zwar (intlength+1).

Bobby35
06.09.2010, 21:12
@inout
danke die inout jetz hab ich die zahlen die sich immer ändern aber die groß & klein buchstaben hab ich noch nich dabei.. .. wie bekomm ich die noch rein?

/E: des mit der länge hat sich erledigt.. nur noch die buchstaben fehlen :D

inout
06.09.2010, 21:16
Damit es funktioniert darfst du, wie BlackBerry auch bereits erwähnt hat, intlength nicht mit der Passwortlänge überschreiben. Nimm dafür eine andere Variable oder mach es einfach so:

intRnd = Int(Rnd() * len(strinputstring)) + 1

Bobby35
06.09.2010, 21:20
danke inout :D jetz hab ich alles drin was ich will :D

/E: eine letzte frage wie bekomm ich des Ding jetz inne .exe Datei die ich auf jedem Rechner ausführen kann?

lg