[vb] for.. next probleem (pass gen)

Pagina: 1
Acties:

  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
Ok.. ik ben al een tijdje uit VB en met php begonnen, maar nu ben ik ook weer wat met vb aan het doen.. Ik maak voor mijn vader een passwordgenerator, en nu kom ik op een onverklaarbaar probleem terecht.
Je hebt een variabel in te stellen tekens. Deze is minimaal 1.
Ik bouw daarom de optie tot het toevoegen van special characters. dus iets van ~ of ?. dat soort dingen.
Nu heb ik de optie erin gedaan deze aan het begin en/of aan het eind te plaatsen.

Hier is de code van de Cmd_Generate
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Private Sub Cmd_Generate_Click()
 appname = "Passwordrator"
 section = "properties"
 Letters = GetSetting(appname, section, "Letters", "1")
 Cijfers = GetSetting(appname, section, "Cijfers", "1")
 Enable = GetSetting(appname, section, "Enable", "0")
 
 aantaltekens = GetSetting(appname, section, "Tekens", "10")
 section = "hoofdlettergevoelig"
 Hoofdletter = GetSetting(appname, section, "1", "0")
 
 section = "hoofdkleingebruik"
 hoofdklein = GetSetting(appname, section, "1", "0")
 
 section = "Special_End"
 Special_End = GetSetting(appname, section, "1", "0")
 
 section = "Special_Begin"
 Special_Begin = GetSetting(appname, section, "1", "0")
 
 Dim Special(30)
 num = 1
 For i = 1 To 30
  If GetSetting(appname, "Checkboxen", i, "0") Then
   If Not GetSetting(appname, "Checkboxen_Caption", i, "") = "" Then
    Special(num) = GetSetting(appname, "Checkboxen_Caption", i, "")
    num = num + 1
   End If
  End If
 Next i
  
 Dim Password As String
 
 lettergebruik = 0
 letternummer = 0
 letterlaatste = 0
 cijfergebruik = 0
 cijfernummer = 0
 cijferlaatste = 0
 
 For Number = 1 To aantaltekens
  teken_gelukt = 0
  If Not teken_gelukt Then
   If (Number = (aantaltekens - 1) And Special_End) Or (Number = 1 And Special_Begin) Then
    Do
     randomvalue = Int((num * Rnd) + 1)
    Loop While Special(randomvalue) = ""
    Password = Password + Special(randomvalue)
    teken_gelukt = 1
   End If
  End If
  
  If Not teken_gelukt Then
   If lettergebruik Then
    
   ElseIf cijfergebruik Then
     
   Else
    keus1 = Int((2 * Rnd) + 1)
    If keus1 = 1 Then
     Password = Password + "9"
    End If
    If keus1 = 2 Then
     Password = Password + "8"
    End If
   End If
  End If
 Next Number
TXT_Generate.Text = Password
End Sub

er zijn 2 problemen die ik niet snap:
1. Nu wil het zo zijn dat deze special characters dus niet meegeteld worden als tekens. waarom weet ik niet. Ik krijg steeds dus meer tekens dan speciale tekens erin staan.. dus stel het aantal tekens = 8, dan krijg ik als er 2 special characters in staan 10 tekens.

2. De special character die aan het eind hoort, staat niet aan het eind. somehow staan er altijd 2 tekens achter.

Die "8" en "9" zijn dus enkel als test.. hier komen dus normaal A tm Z en a tm z.

snapt iemand deze problemen en kan die mij een stukje op pad helpen?

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Definieer teken_gelukt eens als een "Boolean" en gebruik True en False?

Ik heb zo'n vaag vermoeden dat (Not 1) toch stiekem nog True is.

(verder is je stuk code niet helemaal logisch, laat staan netjes)

|_____vakje______|


  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
Op woensdag 23 januari 2002 23:02 schreef CyberSnooP het volgende:
Definieer teken_gelukt eens als een "Boolean" en gebruik True en False?

Ik heb zo'n vaag vermoeden dat (Not 1) toch stiekem nog True is.

(verder is je stuk code niet helemaal logisch, laat staan netjes)
Ok.. 1 is er nu opgelost. nu krijg ik dus nog 1 teken achter de laatste character

Ook is het nou het probleem opgelost dat de special characters niet mee werden geteld opgelost.

Mijn vraag: Wat is er nog meer af te raden.. dus wat is er nog meer niet logisch?

  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
een stukje uitleg over wat erin komt:
er moet kunnen worden ingesteld hoe het password word gegenereerd..
Dus hoeveel letters er achter elkaar komen. Hoe deze letters gegenereerd worden.
d.w.z Op alfabetische volgorden (ASCII) of met behulp van het toetsenbord uiterlijk. Bij die laatste bouw ik een array met de inhoud.

Dan heb ik 2 andere opties erin zitten. moet het password hoofdletters of kleine letters kunnen bevatten.. zo ja, dan krijg je een optie of ze allebij mogen voorkomen in hetzelfde password

  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

code:
1
If (Number = (aantaltekens - 1) And Special_End) Or (Number = 1 And Special_Begin) Then

wordt
code:
1
If (Number = (aantaltekens) And Special_End) Or (Number = 1 And Special_Begin) Then

Verder is opzich de hele variabele teken_gelukt niet nodig als je goed programmeert.

De constructie
code:
1
2
3
Do
     randomvalue = Int((num * Rnd) + 1)
Loop While Special(randomvalue) = ""

komt neer op zoek net zolang totdat je een waarde vind. Dat klinkt vies :) Kijk eens naar de Visual Basic Collection, of maak je Special-array dynamisch

Voor dat laatste een klein voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
Dim Special(30)
num = 1
 For i = 1 To 30
  If GetSetting(appname, "Checkboxen", i, "0") AND (GetSetting(appname, "Checkboxen_Caption", i, "") <> "") Then
    Special(num) = GetSetting(appname, "Checkboxen_Caption", i, "")
    num = num + 1
  End If
 Next i

Redim Preserve Special(num)

De 'vieze' code wordt dan door het iets minder vieze:
code:
1
randomvalue = Special(Int((num * Rnd) + 1))

|_____vakje______|


  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
zodra ik
code:
1
If (Number = (aantaltekens) And Special_End) Or (Number = 1 And Special_Begin) Then

doe, komt de laatste special character er dus nooit in voor.. ik had die -1 er daarom bij gezet. ik heb deze al meerdere keren weggehaald

Die rest klopt wel wat je typt.. zo goed ben ik nog niet he ;)

Verwijderd

Ga gewoon met de debugger stap voor stap door de code heen... Dan zie je precies wat er gebeurt. En zet een watch op de variabele die je vult. Zo kom je eenstuk sneller achter je fout.....

  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
uhm.. ok. heb ik gedaan. zover ik weet hoe het werkt dan. Ik zet een watch op aantaltekens en op nog een aantal variabelen, en dan run ik tot de breaks. Dit is toch de bedoeling?

Ik kom geen rare getallen tegen. Misschien iemand die mij verder kan helpen?

  • smaij
  • Registratie: November 2000
  • Laatst online: 22:56
ok.. dan maar een schopje >:)
Ik ben wel al iets verder, maar ik snap het niet meer.. de laatste special character word niet meegenomen
Pagina: 1