Click here to Skip to main content
13,861,876 members
Click here to Skip to main content
Add your own
alternative version


64 bookmarked
Posted 29 Nov 2006

Generate an Image with a Random Number

, 29 Nov 2006
Rate this:
Please Sign up or sign in to vote.
Generate an image with a random code number for user identification.

Sample Generated Code Image


We need to check if it is a real person who is registering on our Web site. So we decided to generate an image with a random code, hidden for robots, and feed it to the browser instead of a page response. We show it in our registration form, and let the user enter the code to check it.

Create the Web Project

  1. File -> New -> New project

    Create a new CodeImage Visual Basic ASP.NET Web Application.

Change the Web Form

  1. Rename WebForm1.aspx to CodeImage.aspx. Open it.

  2. Switch to HTML View (Right click -> View HTML source).

  3. Remove all HTML code. Leave only the <%@ Page ... %> header.

  4. Switch to Code View (Right click -> View Code).

Change the Page_Load method with the code to generate the random code image. Also set Session("hiddenCode") to allow code checks later:

Private Sub Page_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
    'Put user code to initialize the page here

    ' Create a Bitmap image

    Dim ImageSrc As System.Drawing.Bitmap = _
        New System.Drawing.Bitmap(155, 85)

    ' Fill it randomly with white pixels
    For iX As Integer = 0 To ImageSrc.Width - 1
        For iY As Integer = 0 To ImageSrc.Height - 1
            If Rnd() > 0.5 Then
                ImageSrc.SetPixel(iX, iY, System.Drawing.Color.White)
            End If
        Next iY
    Next iX

    ' Create an ImageGraphics Graphics object from bitmap Image
    Dim ImageGraphics As System.Drawing.Graphics = _

    ' Generate random code. 
    Dim hiddenCode As String = (Fix(Rnd() * 10000000)).ToString
    ' Set Session variable
    Session("hiddenCode") = hiddenCode

    ' Draw random code within Image
    Dim drawFont As New System.Drawing.Font("Arial", _
                    20, FontStyle.Italic)
    Dim drawBrush As New _
    Dim x As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Width - 120)
    Dim y As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Height - 30)
    Dim drawFormat As New System.Drawing.StringFormat
    ImageGraphics.drawString(hiddenCode, drawFont, drawBrush, _
        x, y, drawFormat)

    ' Change reponse content MIME type
    Response.ContentType = "image/jpeg"

    ' Sent Image using Response OutputStream
    ImageSrc.Save(Response.OutputStream, _

    ' Dispose Objects used

End Sub

Build the Solution (F7), and run the application (F5).

Create the Check form.

  1. Create a New Default.aspx Web Form (Right click CodeImage project -> Add -> Add Web Form).

  2. Right click Default.aspx -> Set As Start Page. Open it.

  3. From the IDE menu, click View -> Toolbox. From the HTML tab, drag an Image control to the form. Right click Image -> Properties. Set the image source to "CodeImage.aspx". Set the alternate text to "Hidden Code". Click Apply. Click OK.

  4. From the HTML tab, drag a Label control to the form. Click it twice. Change the text to "Enter the code in the image:".

  5. From the Web Forms tab, drag a TextBox control to the form.

  6. From the Web Forms tab, drag a Button control to the form.

  7. From the Web Forms tab, drag a Label control to the form. Right click -> Properties. Set the Text property to Nothing.

Double click the Button1 button control, and change the Button1_Click code to:

Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    If TextBox1.Text <> Session("hiddenCode") Then
        Label1.Text = "Wrong Code!"
        Label1.Text = "Correct Code!"
    End If
End Sub

Build and run the Web application (F7) (F5).

Points of Interest

That's it!


Just posted.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Software Developer CIMEX S.A.
Cuba Cuba
Rodolfo Ortega is a Cuban Computer Scientist. He works as IT Auditor for the CIMEX S.A. subsidiary in Holguin, Cuba. He lives and works in Holguin, in the eastern part of the island of Cuba.

You can contact him at rodolfom[] for any personal message: Ideas on new articles, bibliography about new APIs, questions, are wellcome.

Submit questions related with current article to the article forum.

You may also be interested in...

Comments and Discussions

Generalin C# please... Pin
pradeep kumarappagari6-Dec-06 23:59
memberpradeep kumarappagari6-Dec-06 23:59 
GeneralRe: in C# please... Pin
Jasmine25017-Dec-06 7:39
memberJasmine25017-Dec-06 7:39 
GeneralRe: in C# please... Pin
pradeep kumarappagari7-Dec-06 19:38
memberpradeep kumarappagari7-Dec-06 19:38 
GeneralRe: in C# please... Pin
rmortega777-Dec-06 10:05
memberrmortega777-Dec-06 10:05 
GeneralRe: in C# please... Pin
pradeep kumarappagari7-Dec-06 19:36
memberpradeep kumarappagari7-Dec-06 19:36 
GeneralHard to read Pin
Jasmine25016-Dec-06 11:45
memberJasmine25016-Dec-06 11:45 
GeneralRe: Hard to read Pin
M_Johnson6-Dec-06 22:36
memberM_Johnson6-Dec-06 22:36 
GeneralRe: Hard to read Pin
Jasmine25017-Dec-06 7:37
memberJasmine25017-Dec-06 7:37 
AnswerRe: Hard to read Pin
mdekok30003-Nov-07 10:59
membermdekok30003-Nov-07 10:59 
GeneralPerformance Fix... Pin
Jon Rista29-Nov-06 11:46
memberJon Rista29-Nov-06 11:46 
The part where you set pixels to white, which uses SetPixel, could be drastically improved. The problem with SetPixel is that each time it is called, it locks the bitmap in memory, gets the bitmap data, scans to the pixel that needs to be set, changes the pixel value, and unlocks the bitmap from memory.

You can greatly improve the performance of this code by using an unsafe function of a fixed code block to use pointers to set the pixels. When you do this, you lock the bitmap once, change all of the pixels with the one lock and a single incremental seek, and unlock at the end, rather than locking, seeking, changing, unlocking for each pixel.

Take a look at this article for more info:
GeneralRe: Performance Fix... Pin
rmortega774-Dec-06 4:21
memberrmortega774-Dec-06 4:21 
GeneralRe: Performance Fix... Pin
Member 418550221-Sep-08 19:16
memberMember 418550221-Sep-08 19:16 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01 | 2.8.190214.1 | Last Updated 29 Nov 2006
Article Copyright 2006 by rmortega77
Everything else Copyright © CodeProject, 1999-2019
Layout: fixed | fluid