Link to home
Create AccountLog in
Avatar of Aleks
AleksFlag for United States of America

asked on

Generate random password and insert value in variable

I am using classic ASP/VB
I need to generate a random password, which should include two numbers, two characters (@#$%, etc) and two letters in caps.
And then I need to create a variable and make this variable be equal to the random password.

I have an old script that generates a password but:

1. I am not sure if it meets the requirements above
2. I am not sure how to make a variable hold the password value
Also has to be 8 characters long

Sub StrRandomize(strSeed)
        Dim i, nSeed
        nSeed = CLng(0)
        For i = 1 To Len(strSeed)
                nSeed = nSeed Xor ((256 * ((i - 1) Mod 4) * AscB(Mid(strSeed, i, 1))))
        Next
        'Randomiser
        Randomize nSeed
End Sub
'--GeneratePassword(nLength)
'--Generates friendly passwords for remembering and pronounciation
Function GeneratePassword(nLength)
        Dim i, bMadeConsonant, c, nRnd
		'You may adjust the below constants to include local,
		'eg. scandinavian characters. This way your passwords
		'will not be limited to latin characters.
        Const strDoubleConsonants = "bdfglmnpst"
        Const strConsonants = "bcdfghklmnpqrstv"
        Const strVocal = "aeiou"
        GeneratePassword = ""
        bMadeConsonant = False
        For i = 0 To nLength
                'Get a random number number between 0 and 1
                nRnd = Rnd
                'Simple or double consonant, or a new vocal?
                'Does not start with a double consonant
				'15% or less chance for the next letter being a double consonant
                If GeneratePassword <> "" AND (bMadeConsonant <> True) AND (nRnd < 0.15) Then
                        'double consonant
                        c = Mid(strDoubleConsonants, Int(Len(strDoubleConsonants) * Rnd + 1), 1)
						'response.write int(Len(strDoubleConsonants) * Rnd + 1)
						'response.write "<br>"
                        c = c & c
						i = i + 1
                        bMadeConsonant = True
                Else
						'80% or less chance for the next letter being a consonant,
						'depending on wether the last letter was a consonant or not.
                        If (bMadeConsonant <> True) And (nRnd < 0.95) Then
                                'Simple consonant
                                c = Mid(strConsonants, Int(Len(strConsonants) * Rnd + 1), 1)
                                bMadeConsonant = True
						'5% or more chance for the next letter being a vocal. 100% if last
						'letter was a consonant - theoreticaly speaking...
                        Else
                                'If last one was a consonant, make vocal
                                c = Mid(strVocal,Int(Len(strVocal) * Rnd + 1), 1)
                                bMadeConsonant = False
                        End If
                End If
                'Add letter
                GeneratePassword = GeneratePassword & c
        Next
        'Is the password long enough, or perhaps too long?
        If Len(GeneratePassword) > nLength Then
                GeneratePassword = Left(GeneratePassword, nLength)
        End If
End Function

StrRandomize CStr(Now) & CStr(Rnd)

Open in new window

Avatar of Martin Liss
Martin Liss
Flag of United States of America image

This is VB6 code so it may need modification. Note that it uses 31 symbols and if you don't want to use them all, delete those you don't want from the SYMBOLS constant and adjust the references to 31 accordingly.
    Const LETTERS As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    Const SYMBOLS As String = "~!@#$%^&*()_+-={}|[]\:"";'<>?,./"
    Dim strPassword As String
    Dim intIndex As Integer
    
    Randomize
    
    ' Generate the password string making the 1st character a letter
    strPassword = Mid(LETTERS, Int((26) * Rnd + 1), 1) & "     "
    ' Randomly generate the 2nd through 6th characters.
    ' Second letter
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(LETTERS, Int((26) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    ' First symbol
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    ' First number
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid$(strPassword, intIndex + 1)
    ' Second number
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid$(strPassword, intIndex + 1)
    
    MsgBox strPassword

Open in new window

Avatar of Aleks

ASKER

I understand "strPassword" is the variable with holding the value ?

I tried displaying the value on the screen with the code below but nothing showed.

<%=strPassword%>

Open in new window

Avatar of Aleks

ASKER

I actually get this error:

Microsoft VBScript compilation  error '800a03f3'

Expected '='

/BlueDot/Intranet/Contacts/webaccess_SPadd.asp, line 94
Const LETTERS As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Try changing lines 1 and 2 to
Const LETTERS  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Const SYMBOLS  = "~!@#$%^&*()_+-={}|[]\:"";'<>?,./"

Open in new window

Also and it's not important but I forgot a ' Second symbol comment between lines 22 and 23.
If the "$" are a problem, remove them.
Avatar of Aleks

ASKER

This is what I have and the error is below:

    Const LETTERS  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	Const SYMBOLS  = "~!@#$%^&*()_+-={}|[]\:"";'<>?,./"
    Dim strPassword As String
    Dim intIndex As Integer
    
    Randomize
    
    ' Generate the password string making the 1st character a letter
    strPassword = Mid(LETTERS, Int((26) * Rnd + 1), 1) & "     "
    ' Randomly generate the 2nd through 6th characters.
    ' Second letter
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(LETTERS, Int((26) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    ' First symbol
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid$(strPassword, intIndex + 1)
    ' First number
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid$(strPassword, intIndex + 1)
    ' Second number
    Do Until Mid$(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left$(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid$(strPassword, intIndex + 1)
    
    MsgBox strPassword

Open in new window


Error:

Microsoft VBScript compilation  error '800a0401'

Expected end of statement

/BlueDot/Intranet/Contacts/webaccess_SPadd.asp, line 96
Dim strPassword As String
----------------^
Change line 3 and 4 to
    Dim strPassword
    Dim intIndex

Open in new window

Avatar of Aleks

ASKER

Microsoft VBScript compilation  error '800a0408'

Invalid character

/BlueDot/Intranet/Contacts/webaccess_SPadd.asp, line 106
Do Until Mid$(strPassword, intIndex, 1) = " "
As I suggested above, try removing all the the "$". They are in lines 13, 16, 19, 22, 23, 26, 28, 31 and 36.
Avatar of Aleks

ASKER

Error on the last line:

Microsoft VBScript runtime  error '800a0046'

Permission denied: 'MsgBox'
Avatar of Aleks

ASKER

I removed that line, but the password doesn't show anything. Here is my entire page, you can check it out.

<html>
<head>
<!--#include file="../../includes/bdot/scripts.asp"-->
<meta charset="utf-8">
<title></title>

<script language="vbscript" runat="server">
    Const LETTERS  = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	Const SYMBOLS  = "~!@#$%^&*()_+-={}|[]\:"";'<>?,./"
    Dim strPassword
    Dim intIndex
    
    Randomize
    
    ' Generate the password string making the 1st character a letter
    strPassword = Mid(LETTERS, Int((26) * Rnd + 1), 1) & "     "
    ' Randomly generate the 2nd through 6th characters.
    ' Second letter
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left(strPassword, intIndex - 1) & Mid(LETTERS, Int((26) * Rnd + 1), 1) & Mid(strPassword, intIndex + 1)
    ' First symbol
    intIndex = Int((5) * Rnd + 2)
    Do Until Mid(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid(strPassword, intIndex + 1)
    Do Until Mid(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left(strPassword, intIndex - 1) & Mid(SYMBOLS, Int((31) * Rnd + 1), 1) & Mid(strPassword, intIndex + 1)
    ' First number
    Do Until Mid(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid(strPassword, intIndex + 1)
    ' Second number
    Do Until Mid(strPassword, intIndex, 1) = " "
        intIndex = Int((5) * Rnd + 2)
    Loop
    strPassword = Left(strPassword, intIndex - 1) & Int((10) * Rnd) & Mid(strPassword, intIndex + 1)
    
   
</script>
</head>

<body>
<p>password = <%=strPassword%></p>

</body>

Open in new window

OK, just remove that line and do whatever you want with strPassword.
Avatar of Aleks

ASKER

I tried to display it but it shows nothing.
Please post your code.
Avatar of Aleks

ASKER

I did, read above, I posted the whole page.
I missed that, sorry.

I don't know anything about VBScript but the web shows me things like this to show the contents of a variable.

WScript.Echo strPassword

Try that at line 44 in your code.
Avatar of Aleks

ASKER

Microsoft VBScript runtime  error '800a01a8'

Object required: 'WScript'
Avatar of Aleks

ASKER

I also noticed the script is missing numbers  :$
It has letters and symbols.
ASKER CERTIFIED SOLUTION
Avatar of Martin Liss
Martin Liss
Flag of United States of America image

Link to home
membership
Create an account to see this answer
Signing up is free. No credit card required.
Create Account
Avatar of Aleks

ASKER

Ok ... thanks. Ill post the points and open another ticket.