This is a simple yet highly customizable function that allows you to generate random strings using VBScript that you can use in your ASP/VBScript applications. The random strings can be used for various purposes, including:
- Login Systems
- Random password for new registrations
- Random password for users requesting password reset
- Referral Codes
- Promotional Codes
- Primary Keys for tables where using integers as primary keys is not desirable
The following code is a VBScript translation of the php random string function I wrote earlier. It generates an 8 character long random string that contains 1 digit:
<%
function RandomString()
Randomize()
dim CharacterSetArray
CharacterSetArray = Array(_
Array(7, "abcdefghijklmnopqrstuvwxyz"), _
Array(1, "0123456789") _
)
dim i
dim j
dim Count
dim Chars
dim Index
dim Temp
for i = 0 to UBound(CharacterSetArray)
Count = CharacterSetArray(i)(0)
Chars = CharacterSetArray(i)(1)
for j = 1 to Count
Index = Int(Rnd() * Len(Chars)) + 1
Temp = Temp & Mid(Chars, Index, 1)
next
next
dim TempCopy
do until Len(Temp) = 0
Index = Int(Rnd() * Len(Temp)) + 1
TempCopy = TempCopy & Mid(Temp, Index, 1)
Temp = Mid(Temp, 1, Index - 1) & Mid(Temp, Index + 1)
loop
RandomString = TempCopy
end function
%>
Sample Output
jogwafs2 uuwigi6r cj3gpdbn 7ifmzdhq yvceae4x qm8dxhik 4kyhyevr evk9hmcb
For better readability and ease of customization, I have split the CharacterSetArray definition on to multiple lines. This code relies on VBScript Arrays and the following functions:
- Randomize()
- Rnd()
- Int()
- Len()
- Mid()
Customization
With minor changes to the CharacterSetArray, you can customize the length and characters of the generated strings.
Complex password that contains 1 digit and 1 symbol
<%
function RandomString()
Randomize()
dim CharacterSetArray
CharacterSetArray = Array(_
Array(6, "abcdefghijklmnopqrstuvwxyz"), _
Array(1, "0123456789"), _
Array(1, "!@#$+-*&?:") _
)
dim i
dim j
dim Count
dim Chars
dim Index
dim Temp
for i = 0 to UBound(CharacterSetArray)
Count = CharacterSetArray(i)(0)
Chars = CharacterSetArray(i)(1)
for j = 1 to Count
Index = Int(Rnd() * Len(Chars)) + 1
Temp = Temp & Mid(Chars, Index, 1)
next
next
dim TempCopy
do until Len(Temp) = 0
Index = Int(Rnd() * Len(Temp)) + 1
TempCopy = TempCopy & Mid(Temp, Index, 1)
Temp = Mid(Temp, 1, Index - 1) & Mid(Temp, Index + 1)
loop
RandomString = TempCopy
end function
%>
Sample Output
zb5&bxjr pd$8lrlu yljmoq:5 $xsaxc6r sf!n3mho tpg+t4pr @zykc1pb ln3ep-vk
Even more complex password that contains 1 upper-case character, 1 digit and 1 symbol
<%
function RandomString()
Randomize()
dim CharacterSetArray
CharacterSetArray = Array(_
Array(5, "abcdefghijklmnopqrstuvwxyz"), _
Array(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), _
Array(1, "0123456789"), _
Array(1, "!@#$+-*&?:") _
)
dim i
dim j
dim Count
dim Chars
dim Index
dim Temp
for i = 0 to UBound(CharacterSetArray)
Count = CharacterSetArray(i)(0)
Chars = CharacterSetArray(i)(1)
for j = 1 to Count
Index = Int(Rnd() * Len(Chars)) + 1
Temp = Temp & Mid(Chars, Index, 1)
next
next
dim TempCopy
do until Len(Temp) = 0
Index = Int(Rnd() * Len(Temp)) + 1
TempCopy = TempCopy & Mid(Temp, Index, 1)
Temp = Mid(Temp, 1, Index - 1) & Mid(Temp, Index + 1)
loop
RandomString = TempCopy
end function
%>
Sample Output
cg9hm$Yy Mmp&j1kp kipww7H+ ?oVjny9b Qjq5lgi- sd:7Elnp *kaxgl4Z xqjc5jN!
Referral code containing mix of digits and upper-case characters
<%
function RandomString()
Randomize()
dim CharacterSetArray
CharacterSetArray = Array(_
Array(4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), _
Array(4, "0123456789") _
)
dim i
dim j
dim Count
dim Chars
dim Index
dim Temp
for i = 0 to UBound(CharacterSetArray)
Count = CharacterSetArray(i)(0)
Chars = CharacterSetArray(i)(1)
for j = 1 to Count
Index = Int(Rnd() * Len(Chars)) + 1
Temp = Temp & Mid(Chars, Index, 1)
next
next
dim TempCopy
do until Len(Temp) = 0
Index = Int(Rnd() * Len(Temp)) + 1
TempCopy = TempCopy & Mid(Temp, Index, 1)
Temp = Mid(Temp, 1, Index - 1) & Mid(Temp, Index + 1)
loop
RandomString = TempCopy
end function
%>
Sample Output
9HL284CB OTH357O8 DY6W32J0 4KI134MJ QP190HE9 KDU35A67 PY03F3S2 3EBV871R