13,052,714 members (64,449 online)
alternative version

#### Stats

157.6K views
30 bookmarked
Posted 27 Jul 2005

# Generate a Random String Key in VB.NET

, 27 Jul 2005
 Rate this:
A slightly more intelligent random string generator.

## Introduction

I had to create a piece of code that will give me a set of randomly generated keys. Each key had to consist of letters and numbers, and the letters could be either (randomly) lowercase or uppercase.

Looking at some sample code on the web, I could not find what I needed. All the examples I found either generated numbers only, or letters only. I also wanted this random key to be based on a certain rule that made it "not straightforward" random, so, I came up with this little piece of code.

## Using the code

The way it works is as follows:

You feed it with a string of letters: `KeyLetters`, a string of numbers: `KeyNumbers`, and how many characters you want the random key to be: `Keychars`. We then call `Generate()` which goes and generates a random number through the `Randomize()` statement and the `Rnd()` function.

Multiply `Rnd()` by 111 -could be any number we choose which is sufficient enough to bring the value above zero. If the resulting number is an even number, then our random character will be a letter. If we get an odd number, then our random character will be a number. To generate a random character, we generate a random index for one of the character arrays (depending on what our random character will be). Once we have an index which is >= o, we use it to get the value in the corresponding index in the character array.

If we are generating a number, then that is our random character. If we are generating a letter, then we need to determine whether we want it uppercase or lowercase. For that purpose we generate another random number by multiplying the value of `Rnd()` by 99 – could be any other number too – and then determine whether the result is even or odd. This time, we capitalize the letter if we get an odd number, otherwise we leave it as it is.

And so on, … the loop keeps "looping" while using, and we use a `StringBuilder` to construct our resulting string , until we've generated the desired number of characters for our Random Key. We convert the `StringBuilder` to `String` and return it with the function.

Note: XML comments in the source code were generated using "VBXC - VB.NET XML Commentor beta 3". I highly recommend it.

#### Module1.vb

```Module Module1
Sub Main()
Dim KeyGen As RandomKeyGenerator
Dim NumKeys As Integer
Dim i_Keys As Integer
Dim RandomKey As String

''' MODIFY THIS TO GET MORE KEYS    - LAITH - 27/07/2005 22:48:30 -
NumKeys = 20

KeyGen = New RandomKeyGenerator
KeyGen.KeyLetters = "abcdefghijklmnopqrstuvwxyz"
KeyGen.KeyNumbers = "0123456789"
KeyGen.KeyChars = 12
For i_Keys = 1 To NumKeys
RandomKey = KeyGen.Generate()
Console.WriteLine(RandomKey)
Next
Console.WriteLine("Press any key to exit...")
End Sub
End Module```

#### RandomKeyGenerator.vb

```Option Strict On
Imports System.Text
''' <date>27072005</date><time>070339</time>
''' <type>class</type>
''' <summary>
''' REQUIRES PROPERTIES: KeyLetters, KeyNumbers, MaxChars
''' </summary>
Public Class RandomKeyGenerator
Dim Key_Letters As String
Dim Key_Numbers As String
Dim Key_Chars As Integer
Dim LettersArray As Char()
Dim NumbersArray As Char()

''' <date>27072005</date><time>071924</time>
''' <type>property</type>
''' <summary>
''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
''' </summary>
Protected Friend WriteOnly Property KeyLetters() As String
Set(ByVal Value As String)
Key_Letters = Value
End Set
End Property

''' <date>27072005</date><time>071924</time>
''' <type>property</type>
''' <summary>
''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
''' </summary>
Protected Friend WriteOnly Property KeyNumbers() As String
Set(ByVal Value As String)
Key_Numbers = Value
End Set
End Property

''' <date>27072005</date><time>071924</time>
''' <type>property</type>
''' <summary>
''' WRITE ONLY PROPERTY. HAS TO BE SET BEFORE CALLING GENERATE()
''' </summary>
Protected Friend WriteOnly Property KeyChars() As Integer
Set(ByVal Value As Integer)
Key_Chars = Value
End Set
End Property

''' <date>27072005</date><time>072344</time>
''' <type>function</type>
''' <summary>
''' GENERATES A RANDOM STRING OF LETTERS AND NUMBERS.
''' LETTERS CAN BE RANDOMLY CAPITAL OR SMALL.
''' </summary>
''' <returns type="String">RETURNS THE
'''         RANDOMLY GENERATED KEY</returns>
Function Generate() As String
Dim i_key As Integer
Dim Random1 As Single
Dim arrIndex As Int16
Dim sb As New StringBuilder
Dim RandomLetter As String

''' CONVERT LettersArray & NumbersArray TO CHARACTR ARRAYS
LettersArray = Key_Letters.ToCharArray
NumbersArray = Key_Numbers.ToCharArray

For i_key = 1 To Key_Chars
''' START THE CLOCK    - LAITH - 27/07/2005 18:01:18 -
Randomize()
Random1 = Rnd()
arrIndex = -1
''' IF THE VALUE IS AN EVEN NUMBER WE GENERATE A LETTER,
''' OTHERWISE WE GENERATE A NUMBER
'''          - LAITH - 27/07/2005 18:02:55 -
''' THE NUMBER '111' WAS RANDOMLY CHOSEN. ANY NUMBER
''' WILL DO, WE JUST NEED TO BRING THE VALUE
''' ABOVE '0'     - LAITH - 27/07/2005 18:40:48 -
If (CType(Random1 * 111, Integer)) Mod 2 = 0 Then
''' GENERATE A RANDOM INDEX IN THE LETTERS
''' CHARACTER ARRAY   - LAITH - 27/07/2005 18:47:44 -
Do While arrIndex < 0
arrIndex = _
Convert.ToInt16(LettersArray.GetUpperBound(0) _
* Random1)
Loop
RandomLetter = LettersArray(arrIndex)
''' CREATE ANOTHER RANDOM NUMBER. IF IT IS ODD,
''' WE CAPITALIZE THE LETTER
'''      - LAITH - 27/07/2005 18:55:59 -
If (CType(arrIndex * Random1 * 99, Integer)) Mod 2 <> 0 Then
RandomLetter = LettersArray(arrIndex).ToString
RandomLetter = RandomLetter.ToUpper
End If
sb.Append(RandomLetter)
Else
''' GENERATE A RANDOM INDEX IN THE NUMBERS
''' CHARACTER ARRAY   - LAITH - 27/07/2005 18:47:44 -
Do While arrIndex < 0
arrIndex = _
Convert.ToInt16(NumbersArray.GetUpperBound(0) _
* Random1)
Loop
sb.Append(NumbersArray(arrIndex))
End If
Next
Return sb.ToString
End Function
End Class```

A list of licenses authors might use can be found here

## Share

 Web Developer United States
No Biography provided

## You may also be interested in...

 First Prev Next
 License superjohn_200625-Feb-15 4:29 superjohn_2006 25-Feb-15 4:29
 code in vb.net(windows application) Member 927728020-Jul-12 0:34 Member 9277280 20-Jul-12 0:34
 Thanx afridibest24-Apr-12 0:18 afridibest 24-Apr-12 0:18
 good job beyhano31-Mar-08 12:13 beyhano 31-Mar-08 12:13
 Good but smiling4ever10-Aug-05 3:15 smiling4ever 10-Aug-05 3:15
 Re: Good but Baiju Nagori12-May-06 9:22 Baiju Nagori 12-May-06 9:22
 Re: Good but mhovidz13-Apr-07 7:51 mhovidz 13-Apr-07 7:51
 Re: Good but smiling4ever13-Apr-07 8:15 smiling4ever 13-Apr-07 8:15
 Re: Good but Laith M. Zraikat5-Aug-08 0:35 Laith M. Zraikat 5-Aug-08 0:35
 Re: Good but Shane Story6-Feb-09 4:31 Shane Story 6-Feb-09 4:31
 Re: Good but Anthony Granger10-Feb-09 14:27 Anthony Granger 10-Feb-09 14:27
 Last Visit: 31-Dec-99 18:00     Last Update: 26-Jul-17 16:15 Refresh 1