ARTICLE

Registration form using captcha image implementation in VB.NET

Posted by Satyapriya Nayak Articles | ASP.NET using VB.NET August 29, 2011
In this article we will create a registration page with captcha implemented to it.
Reader Level:

In this article we will create a registration page with captcha implemented to it.

Before going forward we should know what is captcha?

CAPTCHA: - Completely Automated Public Turing test to tell Computers and Humans Apart. A captcha is a program that protects websites against bots by generating and grading tests that humans can pass but current computer programs cannot. For example, humans can read distorted text but current computer programs can't.

Characteristics: A captcha is a means of automatically generating challenges which intends to:

  •   Provide a problem easy enough for all humans to solve.
  •   Prevent standard automated software from filling out a form, unless it is specially designed to circumvent specific CAPTCHA systems.

For more information please visit

http://www.captcha.net

http://en.wikipedia.org/wiki/CAPTCHA

Table structure

Create two tables employee and country as below:

 captcha1.gif

Program

Default.aspx code

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
    <title>Registration Page</title>

<
style type="text/css">

#datePicker
{

display
:none;
position
:absolute;

border:solid 2px black;
background-color
:white;
}

.content

{

width
:400px;
background-color
:white;
margin
:auto;
padding
:10px;

}
html

{

background-color
:white;
}
        .style10
        {
            background-color: #eeeeee;
            height: 26px;
        }
        .style11
        {
            height: 26px;

        }
    .style12
    {
        background-color: #eeeeee;
    }
    </style>
 
    <link href="style.css" rel="stylesheet" type="text/css" />

</
head>
<
body>
    <form id="form1" runat="server">
    <div>
    <table>
        <tr>
        <td class="deepbluetextbold"><b>Employee Information</b></td>
        </tr>
        <tr>
          <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel1" AssociatedControlID="LocationLabel1" CssClass="style7" Text="Title" />
          </td>
          <td>
          <asp:RadioButtonList id="rb1" runat="server" RepeatLayout="Flow" RepeatColumns="4"
                  RepeatDirection="Horizontal" Width="200px" >
                <asp:ListItem Text="Mr."  Selected="False"/>
                <asp:ListItem Text="Mrs."/>
                <asp:ListItem Text="M/S"/>
                <asp:ListItem Text="Dr."/>
          </asp:RadioButtonList>
          </td>
          <td><asp:RequiredFieldValidator ID="rfv1" Text="Select any Choice" runat="server"
                  ControlToValidate="rb1"></asp:RequiredFieldValidator></td>
        </tr>
        <tr>
          <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel2" AssociatedControlID="LocationLabel2" CssClass="style7" Text="Name*" />
              </td>
              <td>

              <asp:TextBox runat="server" ID="txtname" Width="200px" />
              </td>
              <td>
             <asp:RequiredFieldValidator ID="rfv2" Text="Please Enter the Name" runat="server" ControlToValidate="txtname"></asp:RequiredFieldValidator>
              </td>
        </tr>
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel3" AssociatedControlID="LocationLabel3" CssClass="style7" Text="Email*" />
              </td>
              <td>

              <asp:TextBox runat="server" ID="txtemail" Width="200px"/>
              </td>
              <td>
             <asp:RequiredFieldValidator ID="rfv3" Text="Please Enter the Email" runat="server" ControlToValidate="txtemail"></asp:RequiredFieldValidator>                
              </td>
              <td> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"

                      ErrorMessage="Please enter valid email"
                      ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
                      ControlToValidate="txtemail"></asp:RegularExpressionValidator></td>
        </tr>
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel4" AssociatedControlID="LocationLabel4" CssClass="style7" Text="Date of Birth*" />
             </td>
              <td colspan="0" rowspan="1">
              <asp:TextBox runat="server" ID="txtdateofbirth" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv4" Text="Please Enter the Dateofbirth" runat="server" ControlToValidate="txtdateofbirth"
</
asp:RequiredFieldValidator>
              </td>
        </tr>
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel5" AssociatedControlID="LocationLabel5" CssClass="style7" Text="Guest?*" />
       </td>
              <td>

              <asp:RadioButtonList id="rb2" runat="server" RepeatLayout="Flow" RepeatColumns="3" RepeatDirection="Horizontal" >
                <asp:ListItem Text="Yes"  Selected="False"/>
                <asp:ListItem Text="No"/>
              </asp:RadioButtonList>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv5" Text="Select yes or no" runat="server" ControlToValidate="rb2"></asp:RequiredFieldValidator>
              </td>
        </tr>  
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel6" AssociatedControlID="LocationLabel6"
                CssClass="style7" Text="Company/Organization*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtcompany" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv6" Text="Please Enter the Company" runat="server" ControlToValidate="txtcompany"></asp:RequiredFieldValidator>
              </td>
        </tr>     
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel7" AssociatedControlID="LocationLabel7"

                CssClass="style7" Text="Designation*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtdeg" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv7" Text="Please Enter the Designation" runat="server" ControlToValidate="txtdeg"></asp:RequiredFieldValidator>
              </td>
        </tr>  
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel8" AssociatedControlID="LocationLabel8"
                CssClass="style7" Text="Street Address*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtaddress" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv8" Text="Please Enter the Street Address" runat="server" ControlToValidate="txtaddress"
</
asp:RequiredFieldValidator>
              </td>
        </tr>    
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel9" AssociatedControlID="LocationLabel9"
                CssClass="style7" Text="City*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtcity" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv9" Text="Please Enter the Street City" runat="server" ControlToValidate="txtcity"</asp:RequiredFieldValidator>
              </td>
        </tr>    
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel10" AssociatedControlID="LocationLabel10"
                CssClass="style7" Text="State" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtstate" Width="200px"/>
              </td>
              <td>

              <asp:RequiredFieldValidator ID="rfv10" Text="Please Enter the Street state" runat="server" ControlToValidate="txtstate"
</
asp:RequiredFieldValidator>
              </td>
        </tr>    
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel11" AssociatedControlID="LocationLabel11"
                CssClass="style7" Text="Zip Code*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtzip" Width="200px"/>

              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv11" Text="Please Enter the Zip" runat="server" ControlToValidate="txtzip"></asp:RequiredFieldValidator>
              </td>
        </tr>     
        <tr>
        <td class="style10">
            <asp:Label runat="server" ID="LocationLabel12" AssociatedControlID="LocationLabel12"
                CssClass="style7" Text="Phone*" />

              </td>
              <td class="style11">
              <asp:TextBox runat="server" ID="txtphone" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv12" Text="Please Enter the Phone" runat="server" ControlToValidate="txtphone
</
asp:RequiredFieldValidator>
              </td>
        </tr>  
        <tr>
        <td class="colouredCell">

            <asp:Label runat="server" ID="LocationLabel13" AssociatedControlID="LocationLabel13"
                CssClass="style7" Text="Fax*" />
              </td>
              <td>
              <asp:TextBox runat="server" ID="txtfax" Width="200px"/>
              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv13" Text="Please Enter the Fax" runat="server" ControlToValidate="txtfax"></asp:RequiredFieldValidator>
              </td>
        </tr> 
        <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel14" AssociatedControlID="LocationLabel14"
                CssClass="style7" Text="Website*" />

              </td>
              <td>
              <asp:TextBox runat="server" ID="txtwebsite" Width="200px"/>              </td>
              <td>
              <asp:RequiredFieldValidator ID="rfv14" Text="Please Enter the Website" runat="server" ControlToValidate="txtwebsite"</asp:RequiredFieldValidator>

              </td>
              <td> <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"
            ErrorMessage="Please enter valid Url"
            ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;=]*)?"
                      ControlToValidate="txtwebsite"></asp:RegularExpressionValidator>

    </td>
        </tr>  
        <tr>
        <td class="style12">
            <asp:Label runat="server" ID="LocationLabel15" AssociatedControlID="LocationLabel15"
                CssClass="style7" Text="Country*" />
                 </td>
                 <td>
                 <asp:DropDownList ID="d1" Width="200px" runat="server">
                     <asp:ListItem>Select</asp:ListItem>
                     </asp:DropDownList>
                  </td>
                  <td>
              <asp:RequiredFieldValidator ID="rfv15" Text="Please select any value" runat="server" ControlToValidate="d1"></asp:RequiredFieldValidator>
              </td>
                </tr>    
          <tr>
        <td class="colouredCell">
            <asp:Label runat="server" ID="LocationLabel16" AssociatedControlID="LocationLabel16"
                CssClass="style7" Text="Captcha Image*" />

                 </td>
                 <td><asp:TextBox runat="server" ID="txtcaptcha" Width="200px"/></td>
                 <td>
                 <img style="WIDTH: 119px; HEIGHT: 34px" alt="" src="Captcha.aspx" />
                 </td>

                 <td><a href="Default.aspx" id="uu">Can't Read?</a></td>
                 </tr>           
        </table>
    </div>
    <asp:Button ID="b1" runat="server" Text="Register" />
    </form>

</
body>
</
html>

Default.aspx.vb code

Imports System.Data
Imports
System.Data.SqlClient
Partial
Class _Default
    Inherits System.Web.UI.Page 
    Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ConnectionString").ToString()
    Dim sqlda As SqlDataAdapter
    Dim com As SqlCommand
    Dim ds As DataSet
    Dim dt As DataTable
    Dim str As String
    Dim con As New SqlConnection(strConnString)
   
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            con.Open()
            str = "select * from country"
            com = New SqlCommand(str, con)
            Dim reader As SqlDataReader = com.ExecuteReader
            While reader.Read
                d1.Items.Add(reader("countryname"))

            End While
            reader.Close()
            con.Close()
        End If
    End Sub
    Protected Sub b1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles b1.Click
        Try
            con.Open()
If Session("randomStr").ToString() = txtcaptcha.Text Then

                str = "insert into employee values ('" & rb1.SelectedValue & "','" & txtname.Text & "','" & txtemail.Text & "','" & txtdateofbirth.Text & "','" & rb2.SelectedValue & "','" & txtcompany.Text & "','" & txtdeg.Text & "','" & txtaddress.Text & "','" & txtcity.Text & "','" & txtstate.Text & "','" & txtzip.Text & "'," & txtphone.Text & "," & txtfax.Text & ",'" & txtwebsite.Text & "','" & d1.SelectedValue & "','" & txtcaptcha.Text & "')"

                com = New SqlCommand(str, con)
                com.ExecuteNonQuery()
                Response.Redirect("Success.aspx")
                con.Close()
            Else
                Response.Write("Wrong text inserted ,Please enter new characters shown in image textbox")
            End If
        Catch err As Exception
            Response.Write(err.Message)
        End Try
    End Sub

End
Class

Captcha.aspx code

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Captcha.aspx.vb" Inherits="Captcha" %>
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head runat="server">
    <title>Untitled Page</title>

</
head>
<
body>
    <form id="form1" runat="server">
    <div> 
    </div>
    </form>

</
body>
</
html>

Captcha.aspx.vb code

Imports System.Drawing
Imports
System.Drawing.Imaging

Imports System.Drawing.Text
Partial
Class Captcha
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'create object of Bitmap Class and set its width and height.
        Dim objBMP As Bitmap = New Bitmap(180, 51)
        'Create Graphics object and assign bitmap object to graphics' object.
        Dim objGraphics As Graphics = Graphics.FromImage(objBMP)
        objGraphics.Clear(Color.OrangeRed)
        objGraphics.TextRenderingHint = TextRenderingHint.AntiAlias
        Dim objFont As Font = New Font("arial", 30, FontStyle.Regular)
        'genetating random 6 digit random number
        Dim randomStr As String = GeneratePassword()
 
        'set this random number in session
        Session.Add("randomStr", randomStr)
        objGraphics.DrawString(randomStr, objFont, Brushes.White, 2, 2)
        Response.ContentType = "image/GIF"
        objBMP.Save(Response.OutputStream, ImageFormat.Gif)
        objFont.Dispose()
        objGraphics.Dispose()
        objBMP.Dispose()
    End Sub
    Public Function GeneratePassword() As String
        ' Below code describes how to create random numbers.some of the digits and letters
        ' are ommited because they look same like "i","o","1","0","I","O".
        Dim allowedChars As String = "a,b,c,d,e,f,g,h,j,k,m,n,p,q,r,s,t,u,v,w,x,y,z,"
        allowedChars += "A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z,"
        allowedChars += "2,3,4,5,6,7,8,9"
        Dim sep() As Char = {","c}
        Dim arr() As String = allowedChars.Split(sep)
        Dim passwordString As String = ""
        Dim temp As String
        Dim rand As Random = New Random()
        Dim i As Integer
        For i = 0 To 6 - 1 Step i + 1
            temp = arr(rand.Next(0, arr.Length))
            passwordString += temp
        Next
        Return passwordString
    End Function

End
Class

Output


captcha2.gif

Thanks for reading

Login to add your contents and source code to this article
share this article :
post comment
 
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor
PREMIUM SPONSORS
  • Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
    The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Team Foundation Server Hosting
Become a Sponsor