Avatar of Aleks
Aleks
Flag 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

ASPWeb DevelopmentVB Script

Avatar of undefined
Last Comment
Aleks

8/22/2022 - Mon
Martin Liss

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

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

Martin Liss

Yes.
I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
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"
Martin Liss

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.
Martin Liss

If the "$" are a problem, remove them.
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
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
----------------^
Martin Liss

Change line 3 and 4 to
    Dim strPassword
    Dim intIndex

Open in new window

Aleks

ASKER
Microsoft VBScript compilation  error '800a0408'

Invalid character

/BlueDot/Intranet/Contacts/webaccess_SPadd.asp, line 106
Do Until Mid$(strPassword, intIndex, 1) = " "
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy
Martin Liss

As I suggested above, try removing all the the "$". They are in lines 13, 16, 19, 22, 23, 26, 28, 31 and 36.
Aleks

ASKER
Error on the last line:

Microsoft VBScript runtime  error '800a0046'

Permission denied: 'MsgBox'
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

⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
Martin Liss

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

ASKER
I tried to display it but it shows nothing.
Martin Liss

Please post your code.
Your help has saved me hundreds of hours of internet surfing.
fblack61
Aleks

ASKER
I did, read above, I posted the whole page.
Martin Liss

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.
Aleks

ASKER
Microsoft VBScript runtime  error '800a01a8'

Object required: 'WScript'
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
Aleks

ASKER
I also noticed the script is missing numbers  :$
It has letters and symbols.
ASKER CERTIFIED SOLUTION
Martin Liss

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Aleks

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