19. november 2008 - 14:28Der er
10 kommentarer og 1 løsning
Rnd problemer
Hej,
jeg har et program som generer forskellige random passwords. Mit problem er at jeg skal til tider tjekke om koden har 2 (og kun 2) store bogstaver, hvis ikke, skal den generere en ny.
Findes der en smart måde at gøre dette på, eller må jeg nøjes med den tid det tager et køre et loop indtil den helt automatisk gør det?
I det her tilfælde bruger jeg denne funktion:
Function funcGenerateRandom() Dim intI, intJ As Integer Dim strS As String
Randomize ' Forskellige numre hver gang
loop1: ' Hvis koden har mere eller mindre end 2 store bogstaver For intI = 1 To 8 loop2: ' Hvis der er symboler mellem Chr(90) og Chr(97) intJ = funcRandom(65, 122) ' Små bogstaver If (intJ < 97) And (intJ > 90) Then GoTo loop2 strS = strS & Chr(intJ) Next intI
' Test om koden har 2 (og kun 2) store bogstaver intJ = 0 For intI = 1 To 8 If (Mid(strS, intI, 1) > Chr(64)) And (Mid(strS, intI, 1) < Chr(91)) Then intJ = intJ + 1 End If Next intI If (intJ < 2) Or (intJ > 2) Then GoTo loop1 ' Testet om koden havde 2 (og kun 2) store bogstaver
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Hvordan får jeg så blandet dem med en Rnd funktion? Altså, jeg kan godt finde ud af at lave en Rnd funktion til de små bogstaver, og til de store.. men jeg aner ikke hvordan jeg skal blande de store imellem de små.. kan du hjælpe mig med det?
kan du bruge en fast funktion, som returnerer en streng
Function funcRandom() As String
'(65, 122) ' bogstaver (91 til 96) tegn Dim TælStore As Integer, Tælsmå As Integer, funcRand As Integer Dim intLow As Integer, intHigh As Integer intLow = 65 intHigh = 122 Do If TælStore = 2 Then intLow = 97 ' antal store bogstaver If Tælsmå = 6 Then intHigh = 90 ' antal små bogstaver Gentag: Randomize ' Forskellige numre hver gang funcRand = Int((intHigh - intLow + 1) * Rnd) + intLow If funcRand < 91 Then TælStore = TælStore + 1 If funcRand > 96 Then Tælsmå = Tælsmå + 1 If funcRand >= 91 And funcRand <= 96 Then GoTo Gentag funcRandom = funcRandom & Chr(funcRand) Loop Until Len(funcRandom) = 8 ' total antal bogstaver End Function
Function GenPassword(nchar As Integer, nupcas As Integer) Const valid As String = "abcdefghijklmnopqrstuwvxyz" Dim res As String Dim i, n, ix As Integer Dim uc() As Boolean Randomize ReDim uc(nchar) n = nupcas While n > 0 ix = funcRandom(1, nchar) If Not uc(ix) Then uc(ix) = True n = n - 1 End If Wend res = "" For i = 1 To nchar If uc(i) Then res = res & UCase(Mid(valid, funcRandom(1, Len(valid)), 1)) Else res = res & Mid(valid, funcRandom(1, Len(valid)), 1) End If Next GenPassword = res End Function
nu står jeg ikke sådan og mangler et stykke kode per se.. Jeg manglede lidt inspiration og den fik jeg af erikjacobsens kode. :-) Det sker så sjældent at jeg bruger arrays at jeg tænkte slet ikke på muligheden. Jeg takker for svarene. Erikjacobsen samler vel stadigvæk ikke på points? Hvis du gør, smid så et svar. :-)
(Tak til kabbak og arne_v også, men det var desværre ikke lige det jeg ledte efter)
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.