Thursday, August 4, 2011

generate verification code character string as exported image

To generate verification code character string as exported image we have to create two simple function:

1. public string CreateRandomCode(int codeCount)

This function is used to genearare random number with codeCount digit
and return string.

2. private void CreateImage(string checkCode)

This function is used to generate image by passing Random code generated by function CreateRandomCode(int codeCount).


1. Here's the CreateRandomCode function code

Function Using C#

public string CreateRandomCode(int codeCount)
{
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1;

Random rand = new Random();
for (int i = 0; i < codeCount; i++)
{ if (temp != -1)
{ rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(36);
if (temp != -1 && temp == t)
{
return CreateRandomCode(codeCount);
} temp = t; randomCode += allCharArray[t];
} return randomCode;
}



Function Using VB.NET

Public Function CreateRandomCode(ByVal codeCount As Integer) As String
Dim allChar As String = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
Dim allCharArray As String() = allChar.Split(","c)
Dim randomCode As String = ""
Dim temp As Integer = -1

Dim rand As New Random()
For i As Integer = 0 To codeCount - 1
If temp <> -1 Then
rand = New Random(i * temp)
End If
Dim t As Integer = rand.[Next](36)
If temp <> -1 AndAlso temp = t Then
Return CreateRandomCode(codeCount)
End If
temp = t
randomCode += allCharArray(t)
Next
Return randomCode
End Function


2. 1. Here's the CreateImage function code

Function Using C#

private void CreateImage(string checkCode)
{
System.Drawing.Bitmap image = new System.Drawing.Bitmap(Convert.ToInt32(Math.Ceiling((decimal)(checkCode.Length * 14))), 22);
Graphics g = Graphics.FromImage(image);

try
{
Random random = new Random();
g.Clear(Color.AliceBlue);

for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width); int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}

Font font = new System.Drawing.Font("Comic Sans MS", 12, System.Drawing.FontStyle.Bold); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, new SolidBrush(Color.Red), 2, 2);

for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}

g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);

Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray());

}

finally
{
g.Dispose();
image.Dispose();
}

}


Function Using VB.NET

Public Sub CreateImage(ByVal checkCode As String)
Dim image As System.Drawing.Bitmap = New System.Drawing.Bitmap(Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(checkCode.Length * 14))), 22)

Dim g As Graphics = Graphics.FromImage(Image)
'test
Try
Dim random As Random = New Random()
g.Clear(Color.AliceBlue)
Dim i As Integer = 0

'While i < 25

Dim x1, x2, y1, y2 As Integer
x1 = random.Next(image.Width)
x2 = random.Next(image.Width)
y1 = random.Next(image.Height)
y2 = random.Next(image.Height) g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)

'End While

Dim font As Font = New System.Drawing.Font("Comic Sans MS", 12, System.Drawing.FontStyle.Bold) Dim brush As System.Drawing.Drawing2D.LinearGradientBrush = New System.Drawing.Drawing2D.LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)

g.DrawString(checkCode, font, New SolidBrush(Color.Red), 2, 2)

For i = 0 To 100
Dim x As Integer = random.Next(image.Width)

Dim y As Integer = random.Next(image.Height) image.SetPixel(x, y, Color.FromArgb(random.Next())) Next g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)

'Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream() 'image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif) image.Save(Server.MapPath("~/KoneServices/k1images/RandomWord.gif"), System.Drawing.Imaging.ImageFormat.Gif) Me.ImgVerify.Src = Server.MapPath("~/KoneServices/k1images/RandomWord.gif")

'Response.ClearContent() 'Response.ContentType = "image/Gif"
'Response.BinaryWrite(ms.ToArray())

Catch ex As Exception

'ex code

Finally

g.Dispose()
image.Dispose()

End Try End Sub

Now just call these functions on your desired event. I have used Page_Load event here.

Using C#

protected void Page_Load(object sender, EventArgs e)
{
string checkCode = this.CreateRandomCode(6);
Session["CheckCode"] = checkCode;
CreateImage(checkCode);
}



Using VB.NET

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim checkCode As String = Me.CreateRandomCode(6)
Session("CheckCode") = checkCode
CreateImage(checkCode)

End Sub

Just run the page you can find the generated image as shown below with different generated code.



If you feel this article usefull please put a comment.