12. december 2007 - 06:40Der er
16 kommentarer og 1 løsning
Alle karakter kombinationer.
Jeg har lavet denne kode til at finde alle karakter kombinationer med 5 karakterer.
Sub AlleKombi() Dim i1 As Long Dim i2 As Long Dim i3 As Long Dim i4 As Long Dim i5 As Long Dim x As String For i1 = 1 To 255 For i2 = 1 To 255 For i3 = 1 To 255 For i4 = 1 To 255 For i5 = 1 To 255 x = Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) Next Next Next Next Next End Sub
Kan man lave en mere dynamisk kode, hvor man angiver hvor mange karakterer der skal med, i stedet for et fast antal karakterer?
Det kunne bla. bruges til at finde passwordet på en Excel Workbook. Der kan man jo blive ved med at prøve password indtil man finder det rigtige.
Jeg havde dog ikke beregnet antallet af muligheder før jeg skrev dette indlæg. Det er et imponerende antal man kommer frem til. Det kommer nok til at tage et stykke tid for computeren og prøve alle sammen igennem.
Jeg går ud fra at variablen i5 bare skal hedde i x = x & Chr(i5)
Når jeg stepper igennem koden, bliver x i første omgang n antal karakterer lang, og længden bliver derefter forøget med 1 karakter af gangen. Der bliver altså ikke fundet alle kombinationer med n antal karakterer.
Sub KaldAlleKombi() Dim x As String Call AlleKombi(x, 2) End Sub
Sub AlleKombi(ByVal x As String, l As Long) Dim i As Long If l > 0 Then For i = 1 To 255 x = x & Chr(i) Call AlleKombi(x, l - 1) Next Else Debug.Print x End If End Sub
Sub KaldAlleKombi() Dim x As String Call AlleKombi(x, 2) End Sub
Sub AlleKombi(ByVal x As String, l As Long) Dim i As Long If l > 0 Then For i = 1 To 255 Call AlleKombi(x & Chr(i), l - 1) Next Else Debug.Print x End If End Sub
Så har jeg fået kigget på det. Jeg har afprøvet det i Excel for at se resultatet visuelt.
Det virker fint.
Sub KaldAlleKombi() Dim x As String Dim i As Long For i = 1 To InputBox("Indtast antal cifre.", "Antal cifre") Call AlleKombi(x, i) Next End Sub
Sub AlleKombi(ByVal x As String, l As Long) Dim i As Long Dim r As Long If l > 0 Then For i = 33 To 255 Call AlleKombi(x & Chr(i), l - 1) Next Else Sheet1.Range("A" & Sheet1.Range("A65536").End(xlUp).Row + 1) = x End If End Sub
Jeg har udvidet koden, så den først finder 1 ciffer, derefter 2 cifre osv. osv.
Antallet af kombinationer bliver hurtigt astronomisk, hvilket vist ikke egner sig til at køre i VB. En udvidelse til alle kombinationer i Unicode er vist ikke realistisk.
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.