Avatar billede biohazard_666 Nybegynder
11. april 2004 - 13:34 Der er 11 kommentarer og
3 løsninger

Random tekststreng

Hejsa..

Jeg er ved at lave et program hvor programmet skal lave et tilfældigt password der indeholder store bogstaver, små bogstaver, tal og special tegn hver halve time. Det jeg ikke kan finde ud af er hvordan man laver det random password... Man kan jo bare bruge en timer til det andet...
Avatar billede -cls- Nybegynder
11. april 2004 - 14:09 #1
Hej - måske kan du bruge dette (med inspiration fra http://www.aspfree.com/c/a/ASP-Code/Generate-a-random-pwd-record-to-a-database-and-email/):

ID = CInt(10) + 1
r = Rnd * 50
MsgBox prompt:=r
For i = 0 To 20
    If CInt(r) > 0 And CInt(r) < 26 Then myStr = myStr + Chr(97 + CInt(r))
    r = Rnd * 100
Next

MsgBox prompt:=myStr
pwd = Left(myStr, 2)
pwd = pwd & ID
pwd = pwd & Right(myStr, 2)
pwd = pwd & Second(Time)

MsgBox prompt:=pwd
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 14:18 #2
venter lige og ser om der kommer flere svar...
Avatar billede sjh Nybegynder
11. april 2004 - 16:51 #3
'----------------------------- Form1 -----------------------------
Option Explicit

Private Sub Command1_Click()
  Me.Caption = GenPass(20)
End Sub

Public Function GenPass(ByVal intLen As Integer) As String
Dim strOut As String
Dim intLast As Integer
Dim intValue As Integer

  Randomize Time

  Do Until Len(strOut) = intLen

    If Int((2 * Rnd) + 1) = 1 Then
      intValue = (Int((26 * Rnd) + 1) + 64) 'A til Z
        Else
      intValue = (Int((26 * Rnd) + 1) + 96) 'a til z
    End If

    If intLast <> intValue Then
      strOut = (strOut & Chr$(intValue))
      intLast = intValue
    End If

  Loop
  GenPass = strOut
End Function
'----------------------------- Form1 -----------------------------
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 16:56 #4
hejsa.. Har selv fundet en kode:
Option Explicit

Private Sub Command1_Click()
Dim num_characters As Integer
Dim i As Integer
Dim txt As String
Dim ch As Integer

    Randomize
    num_characters = CInt(txtNumCharacters.Text)
    For i = 1 To num_characters
        ch = Int((26 + 26 + 10) * Rnd)
        If ch < 26 Then
            txt = txt & Chr$(ch + Asc("A"))
        ElseIf ch < 2 * 26 Then
            ch = ch - 26
            txt = txt & Chr$(ch + Asc("a"))
        Else
            ch = ch - 26 - 26
            txt = txt & Chr$(ch + Asc("0"))
        End If
    Next i

    txtResults.Text = txt
End Sub

men tester lige sjh's kode om den er bedre.. I skal nok få point...

Bio
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 16:58 #5
lægger du et svar -cls-??
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 16:58 #6
sjh -> fin nok kode :) men den bruger ikke special tegn eller tal.. Eller god :)
Avatar billede sjh Nybegynder
11. april 2004 - 17:07 #7
nu er der tal med.. men hvad mener du med special tegn?? (skriv dem lige)


'----------------------------- Form1 -----------------------------
Option Explicit

Private Sub Command1_Click()
  Me.Caption = GenPass(20)
End Sub

Public Function GenPass(ByVal intLen As Integer) As String
Dim strOut As String
Dim intLast As Integer
Dim intValue As Integer

  Randomize Time

  Do Until Len(strOut) = intLen

    Select Case Int((3 * Rnd) + 1)
          Case 1: intValue = (Int((26 * Rnd) + 1) + 64) 'A til Z
          Case 2: intValue = (Int((26 * Rnd) + 1) + 96) 'a til z
          Case 3: intValue = (Int((10 * Rnd) + 1) + 47) '0 til 9
    End Select

    If intLast <> intValue Then
      strOut = (strOut & Chr$(intValue))
      intLast = intValue
    End If

  Loop
  GenPass = strOut
End Function
'----------------------------- Form1 -----------------------------
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 17:09 #8
Special tegn:

! " # ¤ % & / ( ) = ? ¨ ^ ` ´ + * ' . : , ; - _ < > \

Det er specialtegn :)
Avatar billede sjh Nybegynder
11. april 2004 - 17:14 #9
så skulle den være der...


'----------------------------- Form1 -----------------------------
Option Explicit

Private Sub Command1_Click()
  Me.Caption = GenPass(20)
End Sub

Public Function GenPass(ByVal intLen As Integer) As String
Dim strOut As String
Dim intLast As Integer
Dim intTegn As Integer
Dim intValue As Integer

Const strTegn As String = "!#¤%&/()=?¨^`´+*'.:,;-_<>\"

  Randomize Time

  Do Until Len(strOut) = intLen

    Select Case Int((4 * Rnd) + 1)
          Case 1: intValue = (Int((26 * Rnd) + 1) + 64) 'A til Z
          Case 2: intValue = (Int((26 * Rnd) + 1) + 96) 'a til z
          Case 3: intValue = (Int((10 * Rnd) + 1) + 47) '0 til 9
          Case 4
            intTegn = Int((Len(strTegn) * Rnd) + 1)
            intValue = Asc(Mid$(strTegn, intTegn, 1))
    End Select

    If intLast <> intValue Then
      strOut = (strOut & Chr$(intValue))
      intLast = intValue
    End If

  Loop
  GenPass = strOut
End Function
'----------------------------- Form1 -----------------------------
Avatar billede sjh Nybegynder
11. april 2004 - 17:17 #10
sku nok være sådan:

Const strTegn As String = "!#¤%&/("")=?¨^`´+*'.:,;-_<>\"
Avatar billede -cls- Nybegynder
11. april 2004 - 17:22 #11
Svar
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 17:23 #12
jubii :) det virker... Tror jeg vil bruge din version da den anden jeg fandt ikke brugte special tegn :)

<-*-*-*-*- SPØRGSMÅL LUKKET -*-*-*-*-*>
Avatar billede biohazard_666 Nybegynder
11. april 2004 - 17:25 #13
hmm... Advanveret pointdeling virker ikke lige nu :S
Avatar billede sjh Nybegynder
11. april 2004 - 17:31 #14
du kan også gøre sådan her.. så forkommer det samme tegn, tal eller bogstav ikke 2 gange. ;)

'----------------------------- Form1 -----------------------------
Option Explicit

Private Sub Command1_Click()
  Me.Caption = GenPass(20)
End Sub

Public Function GenPass(ByVal intLen As Integer) As String
Dim strOut As String
Dim intTegn As Integer
Dim intValue As Integer

Const strTegn As String = "!#¤%&/("")=?¨^`´+*'.:,;-_<>\"

  Randomize Time
  If (Len(strTegn) + 62) > intLen Then
    Do Until Len(strOut) = intLen

      Select Case Int((4 * Rnd) + 1)
            Case 1: intValue = (Int((26 * Rnd) + 1) + 64) 'A til Z
            Case 2: intValue = (Int((26 * Rnd) + 1) + 96) 'a til z
            Case 3: intValue = (Int((10 * Rnd) + 1) + 47) '0 til 9
            Case 4
              intTegn = Int((Len(strTegn) * Rnd) + 1)
              intValue = Asc(Mid$(strTegn, intTegn, 1))
      End Select

      If InStr(strOut, Chr$(intValue)) = 0 Then
        strOut = (strOut & Chr$(intValue))
      End If

    Loop
  End If
  GenPass = strOut
End Function
'----------------------------- Form1 -----------------------------
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester