Function to create a random, complex password


Function generatePassword(PASSWORD_LENGTH)

	Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER
	Dim newPassword, count, pwd 
	Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer


	NUMLOWER    = 48  ' 48 = 0
	NUMUPPER    = 57  ' 57 = 9
	LOWERBOUND  = 65  ' 65 = A
	UPPERBOUND  = 90  ' 90 = Z
	LOWERBOUND1 = 97  ' 97 = a
	UPPERBOUND1 = 122 ' 122 = z
	SYMLOWER    = 33  ' 33 = !
	SYMUPPER    = 46  ' 46 = .
	pCheckComplexUp  = 0 ' used later to check number of character types in password
	pCheckComplexLow = 0 ' used later to check number of character types in password
	pCheckComplexNum = 0 ' used later to check number of character types in password
	pCheckComplexSym = 0 ' used later to check number of character types in password
	
	
	' initialize the random number generator
	Randomize

	newPassword = ""
	count = 0
	Do Until count = PASSWORD_LENGTH
		' generate a num between 2 and 10 
		
		' if num <= 2 create a symbol 
		If Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 2 Then
			pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER )

			' if num is between 3 and 5 create a lowercase
		ElseIf Int( ( 10 - 2 + 1 ) * Rnd + 2 ) > 2 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 5 Then
			pwd = Int( ( UPPERBOUND1 - LOWERBOUND1 + 1 ) * Rnd + LOWERBOUND1 )

			' if num is 6 or 7 generate an uppercase
		ElseIf Int( ( 10 - 2 + 1 ) * Rnd + 2 ) > 5 And  Int( ( 10 - 2 + 1 ) * Rnd + 2 ) <= 7 Then
			pwd = Int( ( UPPERBOUND - LOWERBOUND + 1 ) * Rnd + LOWERBOUND ) 

		Else
			pwd = Int( ( NUMUPPER - NUMLOWER + 1 ) * Rnd + NUMLOWER )
		End If

		newPassword = newPassword + Chr( pwd )
		
		count = count + 1
		
		'Check to make sure that a proper mix of characters has been created.  If not discard the password.
		If count = (PASSWORD_LENGTH) Then
			For pCheckComplex = 1 To PASSWORD_LENGTH
				'Check for uppercase
				If Asc(Mid(newPassword,pCheckComplex,1)) >64 And Asc(Mid(newPassword,pCheckComplex,1))< 90 Then
					pCheckComplexUp = 1 
					'Check for lowercase
				ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >96 And Asc(Mid(newPassword,pCheckComplex,1))< 123 Then
					pCheckComplexLow = 1 
					'Check for numbers
				ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >47 And Asc(Mid(newPassword,pCheckComplex,1))< 58 Then
					pCheckComplexNum = 1
					'Check for symbols
				ElseIf Asc(Mid(newPassword,pCheckComplex,1)) >32 And Asc(Mid(newPassword,pCheckComplex,1))< 47 Then
					pCheckComplexSym = 1
				End If
			Next
			
			'Add up the number of character sets.  We require 3 or 4 for a complex password.
			pCheckAnswer = pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym
			
			If pCheckAnswer < 3 Then
				newPassword = ""
				count = 0
			End If
		End If
	Loop
	'The password is good so return it
	generatePassword = newPassword
End Function 
All code submitted to OpenNTF XSnippets, whether submitted as a "Snippet" or in the body of a Comment, is provided under the Apache License Version 2.0. See Terms of Use for full details.
No comments yetLogin first to comment...