Random mit Buchstaben und Zahlen!

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Random mit Buchstaben und Zahlen!

    HallO!

    Ich will dass quasi ein Fake Key generiert wird.
    Einfach ein Random mit Buchstaben und Zahlen So lang
    39S2-Q74W-PJUV-FUNU-DFGN

    ungf.
    Dim rnd As System.Random = New System.Random()

    Dim i AsLong = rnd.Next(1, 10)

    Somit generiere ich doch noch nur Zahlen von 1-10

    Wie machei ch Buchstaben und Zahlenblöcke siehe oben?
    Entweder baust du dir ein Array wo alle möglichen Zeichen drin sind und dann mit rnd.Next(0, meinArray.length) oder in VB6 gab es die die CHR-Funktion und CHR(65) war z.B. ein "A", weil in der ASCII-tabelle das 65. Zeichen ein A ist, dann würde es so aussehen: CHR(rnd.Next(65,65+26-1))
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Statt Array gent auch eine Zeichenkette

    VB.NET-Quellcode

    1. dim s as string = "0123456789ABCDEF..."
    2. dim i as integer = rnd.Next(1, s.length)
    3. msgbox s.substring(i, 1)

    oder so ähnlich
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Ich habs jetzt so!

    VB.NET-Quellcode

    1. Dim rnd As System.Random = New System.Random() Dim s As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"Dim i As Integer = rnd.Next(1, s.Length) Dim a As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim b As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Dim c As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" If i = 1 Then MessageBox.Show(s & a & b & c) End If




    AUch so will es nicht klappen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim rnd As System.Random = New System.Random()
    3. Dim a As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    4. Dim b As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    5. Dim c As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    6. Dim s As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"Dim i As Integer = rnd.Next(1, s.Length & a.Length & b.Length & c.Length)
    7. If i = 1 Then
    8. MessageBox.Show(s & a & b & c)
    9. End If




    Leider kommt trotzdem nur ein Buchstabe in der MSGBox!
    Help!
    Du kannst daraus Funktionen bauen:

    VB.NET-Quellcode

    1. function generate_key() as string
    2. dim s as string
    3. for j as integer = 1 to 4
    4. for i as integer = 1 to 4
    5. s = s & generate_char()
    6. next i
    7. if j < 4 then s = s & "-"
    8. next j
    9. return s
    10. end function
    11. function generate_char() as string
    12. Dim rnd As System.Random = New System.Random()
    13. Dim s As String = "0123456789ABCDEF..."
    14. Dim i As Integer = Rnd.Next(1, s.length)
    15. return s.substring(i, 1)
    16. end function
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Dann gleich ne Klasse dafür erstellen:

    VB.NET-Quellcode

    1. class keygen
    2. private Rnd As System.Random
    3. public chars_per_group as integer
    4. public groups as integer
    5. Sub New()
    6. me.Rnd = New System.Random()
    7. me.chars_per_group = 4
    8. me.groups = 5
    9. end sub
    10. Public Function generate_key() As String
    11. Dim s As String
    12. For j As Integer = 1 To me.groups
    13. For i As Integer = 1 To me.chars_per_group
    14. s = s & Me.generate_char()
    15. Next i
    16. If j < me.groups Then s = s & "-"
    17. Next j
    18. Return s
    19. End Function
    20. Private Function generate_char() As String
    21. Dim s As String = "0123456789ABCDEF..."
    22. Dim i As Integer = Rnd.Next(1, s.length)
    23. Return s.substring(i, 1)
    24. End Function
    25. End Class

    VB.NET-Quellcode

    1. Dim key as new keygen()
    2. Textbox1.text = key.generate_key()
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Hi

    Mir ist bei Random folgendes aufgefallen:

    Wenn man sich Random in eine Textdatei schreiben lässt bekommt man mehrmals den gleichen Wert. Das ist durch die Zeit bedingt die vergeht, weil Random auf Zeit basiert ist. Also:

    Mach dir am besten nen Timer und schau über ein Integer bzw. die Länge des Strings der generiert wurde nach ob noch mehr Zufallszahlen benötigt weden.

    (zumindest ist das auf meinem PC so)

    Gruß
    ~blaze~
    Randomfuntkionen basieren zwar wirklich auf der Zeit und/oder Datum und können deshalb keine wirklichen Zufallszahlen liefern. Aber bedenke, die zahlenfolge aaaaaaaaaa ist genau wahrscheinlich wie ajdhljasdbgth, was Menschen nur allzu oft vergessen.
    Ich hab mir eine Randomfunktion überlegt mit der man mit hoher Wahrscheinlichkeit andere Zahlen rauskriegt :D

    VB.NET-Quellcode

    1. Dim Str As String = "" 'Wird zurückgegeben
    2. Private Function GetRandomChar(ByVal Str As String) As Char
    3. Dim Val As New Random(Str.Length) 'Basis auf Str.Length setzen ==> unterschiedliche Werte wenn sich Str.Length ändert
    4. Dim ReturnValue As Integer = Val.Next(55, 90)
    5. '55 = Asc("A") - 10
    6. '90 = Asc("Z")
    7. ' Asc("A") - 10 weil man somit die Zahlen von 0 - 9 mit einrechnen kann
    8. If ReturnValue < 65 Then
    9. Dim ReturnInt As Integer = 65 - ReturnValue
    10. Return ReturnInt.ToString
    11. Else
    12. Return Chr(ReturnValue)
    13. End If
    14. End Function
    15. Private Sub UseGetRandom()
    16. For i As Integer = 0 To 15 '15 ist die Länge vom Ausgabestring
    17. Str &= GetRandomChar(Str)
    18. Next
    19. End Sub


    Der Wert ist allerdings immer der gleiche. 8-)

    Gruß
    ~blaze~