Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 12:13 Der er 21 kommentarer og
2 løsninger

Automatisk generere password når ny post oprettes

Jeg har søgt lidt efter hjælp, men ikke fundet noget jeg kan bruge - er der nogen der har nogen forslag?
Minder meget om følgende spg. http://www.eksperten.dk/spm/119177
Men der beskrives desværre ingen løsning :o/

Hver gang en ny post oprettes i min form, skal der autogenereres et 8-cifret password, knyttet til brugerID (helst kun bestående af små bogstaver (abcd...) - (ikke 1234567890, ABCD...)
Jeg har et felt i brugertabellen, der hedder 'password', men pt. skal jeg indtaste PW manuelt, når jeg opretter en bruger - ikke smart!

Kan man bruge rand()-funktionen til dette?
Eller findes der en anden og lettere måde?
Avatar billede juks Novice
13. december 2002 - 12:23 #1
MyValue = Int((10000000 * Rnd) + 1)    ' Frembring en tilfældig værdi mellem 1 og 1000000#
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 12:25 #2
Kan man ikke gøre det med bogstaver i stedet for et tal?
Avatar billede terry Ekspert
13. december 2002 - 12:54 #3
you could use the users initials and append them to this random number. This is hand so that you can make queries which enable you to select records for a specific user.
Avatar billede hugopedersen Nybegynder
13. december 2002 - 13:30 #4
Hvad med at bruge en GUID funktion til dette ?
Den genererer nogle unikke numre på godt nok en del flere tegn, men så kan du vel bare snuppe de første !
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 13:51 #5
hugopedersen >> Hvordan fungerer en GUID funktion? Og hvad mener du med 'unikke numre'? Er det bogstaver eller tal? Jeg vil meget gerne have (små) bogstaver..

terry >> Jeg vil gerne helt undgå tal..
Avatar billede juks Novice
13. december 2002 - 13:56 #6
hvorfor laver du ikke en tabel indeholdne 10 bogstaver samt en række med tal (autonr) også laver du et tilfældigt tal som så tage et bogstav istedet for tallet.
eks.
1 | a
2 | b
3 | c

123 = abc
321 = cba
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 14:00 #7
juks >> Hvordan kæder jeg så din rnd-funktion sammen med den tabel?

Private Sub Form_BeforeUpdate(Cancel As Integer)
  If Me.NewRecord Then
    'Genererer et password til en ny modtager
    MyValue = Int((10000000 * Rnd) + 1)
    ....?....

  End If
End Sub
Avatar billede juks Novice
13. december 2002 - 14:03 #8
hmmm.....
det nemmeste er vel at lave 10  opdaterings forsprøgelse
Avatar billede hugopedersen Nybegynder
13. december 2002 - 14:06 #9
Prøv følgende - kan tilpasses. I følge standarden kan der ikke dannes 2 GUIDs der er ens på noget tidspunkt. Jeg kan ikke huske om resultatet er store eller små bogstaver, men der er en funktion i Access der automatisk konverterer til små bogstaver, så......................

Type GUID
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
  Data4(7) As Byte
End Type

Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long

Private Const S_OK = 0 ' return value from CoCreateGuid

Function GetGUID() As String

Dim lResult As Long
Dim lguid As GUID
Dim MyGuidString1 As String
Dim MyGuidString2 As String
Dim MyGuidString3 As String
Dim DataLen As Integer
Dim StringLen As Integer
Dim i As Integer
Dim IfxGUID As String

On Error GoTo error_olemsg

lResult = CoCreateGuid(lguid)

If lResult = S_OK Then
  MyGuidString1 = Hex$(lguid.Data1)
  StringLen = Len(MyGuidString1)
  DataLen = Len(lguid.Data1)
  MyGuidString1 = leadingZeros(2 * DataLen, StringLen) _
      & MyGuidString1 'First 4 bytes (8 hex digits)

  MyGuidString2 = Hex$(lguid.Data2)
  StringLen = Len(MyGuidString2)
  DataLen = Len(lguid.Data2)
  MyGuidString2 = leadingZeros(2 * DataLen, StringLen) _
      & Trim$(MyGuidString2) 'Next 2 bytes (4 hex digits)

  MyGuidString3 = Hex$(lguid.Data3)
  StringLen = Len(MyGuidString3)
  DataLen = Len(lguid.Data3)
  MyGuidString3 = leadingZeros(2 * DataLen, StringLen) _
      & Trim$(MyGuidString3) 'Next 2 bytes (4 hex digits)

  IfxGUID = MyGuidString1 & "-" & MyGuidString2 & "-" & MyGuidString3 & "-"

  For i = 0 To 1
      IfxGUID = IfxGUID & _
      Format$(Hex$(lguid.Data4(i)), "00")
  Next i

  IfxGUID = IfxGUID & "-"

  For i = 2 To 7
      IfxGUID = IfxGUID & _
      Format$(Hex$(lguid.Data4(i)), "00")
  Next i

  GetGUID = IfxGUID

Else
  GetGUID = "00000000" ' return zeros if function unsuccessful
End If

Exit Function

error_olemsg:
  GetGUID = "00000000"
  Exit Function

End Function
Avatar billede juks Novice
13. december 2002 - 14:07 #10
eller det tror jeg faktisk ikke du kan ....
jeg finder lige en løsning
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 14:10 #11
hugopedersen >> Jeg har lidt svært ved at gennemskue din kode... Returneres der en værdi jeg kan sætte lig Me.Password?
Avatar billede hugopedersen Nybegynder
13. december 2002 - 14:27 #12
Måske ikke helt men du kan prøve at lave en test. Et eller andet sted sættes der nogle - ( bindestreger ) ind, dem skal du fjerne.

PS: koden er rent faktisk snuppet direkte fra en M$ website, så den kan jeg ikke tage credit for :-)
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 14:37 #13
hugopedersen >> Hvordan indsættes koden? Skal det ind i et seperat modul eller hva? Hvis jeg indsætter det i starten af min indtastningsform således:

Option Compare Database
Option Explicit

Type GUID
  Data1 As Long
  Data2 As Integer
  Data3 As Integer
.
.
.

Så kan jeg ikke kalde f.eks. Me.XXX eller DoCmd.XXX herefter..
Avatar billede hugopedersen Nybegynder
13. december 2002 - 14:44 #14
Du skal lave det i et modul og så kalde funktionen GetGUID()
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 14:50 #15
MyGuidString1 = leadingZeros(2 * DataLen, StringLen) _
      & MyGuidString1 'First 4 bytes (8 hex digits)
Denne linie giver en Compile Error "Sub or function not defined" og 'leadingZeros' markeres blåt!
Avatar billede jkrons Professor
13. december 2002 - 14:53 #16
Denne kode er noget mere primitiv, men den løser problemet sålænge ikke alle kodeord SKAL være forskellige.

Private Sub Brugernavn_LostFocus()
Dim pwgen As String
Dim pw(8) As String
Dim Cip As Integer
For i = 1 To 8
Cip = Left(Int(Rnd(1) * 10000), 2)
Select Case Cip
    Case 0 To 3
    pw(i) = "a"
    Case 4 To 6
    pw(i) = "b"
    Case 7 To 10
    pw(i) = "c"
    Case 11 To 13
    pw(i) = "d"
    Case 14 To 17
    pw(i) = "e"
    Case 18 To 21
    pw(i) = "f"
    Case 22 To 25
    pw(i) = "g"
    Case 26 To 29
    pw(i) = "h"
    Case 30 To 33
    pw(i) = "i"
    Case 34 To 36
    pw(i) = "j"
    Case 37 To 40
    pw(i) = "k"
    Case 41 To 44
    pw(i) = "l"
    Case 45 To 48
    pw(i) = "m"
    Case 49 To 53
    pw(i) = "n"
    Case 54 To 57
    pw(i) = "o"
    Case 58 To 61
    pw(i) = "p"
    Case 62 To 65
    pw(i) = "q"
    Case 66 To 69
    pw(i) = "r"
    Case 70 To 72
    pw(i) = "s"
    Case 73 To 76
    pw(i) = "t"
    Case 77 To 80
    pw(i) = "u"
    Case 81 To 84
    pw(i) = "v"
    Case 85 To 88
    pw(i) = "w"
    Case 89 To 92
    pw(i) = "x"
    Case 93 To 96
    pw(i) = "y"
    Case 97 To 99
    pw(i) = "z"
End Select
Next i

pwgen = pw(1) & pw(2) & pw(3) & pw(4) & pw(5) & pw(6) & pw(7) & pw(8)

Me!password = pwgen
End Sub
Avatar billede hugopedersen Nybegynder
13. december 2002 - 14:53 #17
Function leadingZeros(lngNumber, intSize)
  Dim strTemp As String
 
  strTemp = String(intSize, "0")
  strTemp = Right(strTemp & Trim(str(lngNumber)), intSize)

  leadingZeros = strTemp
 
End Function
Avatar billede hugopedersen Nybegynder
13. december 2002 - 14:55 #18
Den var lige smuttet i svinget :-)

Jeg bruger selv en modificeret version til at generere 100% unikke nøgler til kryptering.
Avatar billede terry Ekspert
13. december 2002 - 14:59 #19
If the reason for having a password is the same as in  http://www.eksperten.dk/spm/119177 then why dont you let the user enter a password? Combined with a unique user name would be a secure as what your looking for now wouldnt it?
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 15:07 #20
jkrons >> Din løsning virker tilsyneladende helt efter hensigten. Det eneste der manglede var at få erklæret variablen 'i' i starten.

Men også tak til hugopedersen for den omfattende hjælp..

terry >> Det er ikke brugerne der indtaster deres oplysninger i øjeblikket.. Det gøres af en medarbejder her. Men DBen skal (på sigt) på Nettet, hvor brugerne skal kunne redigere i deres oplysninger.. (derfor skal der være passwords)
Denne løsning er helt i orden..

Endnu engang tak for hjælpen

/U.K.
Avatar billede ugotabe_kidding Nybegynder
13. december 2002 - 15:09 #21
hugopedersen >> Din løsning returnerer faktisk tre strenge af 8 karakterer, adskilt af -, men der er både bogstaver og tal i passwordet.. Da jeg ønsker et rent bogstav-password var jkrons løsning bedre :o/
Avatar billede jkrons Professor
13. december 2002 - 15:11 #22
Velbekomme! Jeg havde lige glemt en erklæring og løsningen kan sikkert raffineres, men er du tilfreds er det jo godt nok. Tak for point!
Avatar billede hugopedersen Nybegynder
14. december 2002 - 13:43 #23
OK - men et password med bare bogstaver er jo pr. definition et dårligt password :-)  I hvertfald er det det IT revisionen skriver hvert år når den IT afdeling jeg arbejder i bliver checket :-)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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