Anatoly Lubarsky Logo
programming, design, integration, games, music

Improvement to HIP CAPTCHA control for Blog Engines

This is a small improvement to HIP CAPTCHA control (CAPTCHA for blog engines based ASP.NET). (Hey Miguel). It also demonstrates how to use HtmlTextWriter to render HTML properly in ASP.NET. Forget about writing HTML strings. You have to write a bit more code, but you get well-formatted HTML with automatic support for older browsers.


protected override void Render(HtmlTextWriter writer)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("?iw="); 
    sb.Append(this._imageWidth);
    sb.Append("&ih="); 
    sb.Append(this._imageHeight);
    sb.Append("&tc="); 
    sb.Append(this._textColor.ToArgb());
    sb.Append("&tpc="); 
    sb.Append(this._textPatternColor.ToArgb());
    sb.Append("&bc="); 
    sb.Append(this._backgroundColor.ToArgb());
    sb.Append("&bpc="); 
    sb.Append(this._backgroundPatternColor.ToArgb());
    sb.Append("&tp="); 
    sb.Append(this._textPattern.ToString());
    sb.Append("&bp="); 
    sb.Append(this._backgroundPattern.ToString());
    sb.Append("&fs="); 
    sb.Append(this._fontSize);
    sb.Append("&hc="); 
    sb.Append(HttpUtility.UrlEncode(this._hipCode));

    string strControlMessage = this._controlMessage;
    if (strControlMessage.Length <= 0)
    {
        strControlMessage = "Enter the code you see";
    }

    //
    // render writer
    writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
    writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
    writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
    writer.RenderBeginTag(HtmlTextWriterTag.Table);
    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.AddAttribute(HtmlTextWriterAttribute.Rowspan, "2");
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
         
    // image
    writer.AddAttribute(HtmlTextWriterAttribute.Src,
        "HIPGenerator.aspx" + sb.ToString());
    writer.AddAttribute(HtmlTextWriterAttribute.Width,
        this._imageWidth.ToString()); 
    writer.AddAttribute(HtmlTextWriterAttribute.Height,
        this._imageHeight.ToString());
    writer.AddStyleAttribute("border",
        String.Format("{0} solid {1}px",
        this._imageBorderColor.ToKnownColor(),
        this._imageBorderSize));
    writer.RenderBeginTag(HtmlTextWriterTag.Img);
    writer.RenderEndTag();

    writer.RenderEndTag();
    writer.RenderBeginTag(HtmlTextWriterTag.Td);

    // span
    writer.AddStyleAttribute("font-family", "verdana");
    writer.AddStyleAttribute("font-size", "6pt");
    writer.RenderBeginTag(HtmlTextWriterTag.Span);
    writer.Write(strControlMessage + ":");
    writer.RenderEndTag();

    writer.RenderEndTag();
    writer.RenderEndTag();
    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.AddAttribute(HtmlTextWriterAttribute.Align, "left");
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
         
    // input text
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "text");
    writer.AddAttribute(HtmlTextWriterAttribute.Id, this.UniqueID);
    writer.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
    writer.AddAttribute(HtmlTextWriterAttribute.Maxlength,
        this.CodeLenght.ToString());
    writer.RenderBeginTag(HtmlTextWriterTag.Input);
    writer.RenderEndTag();

    writer.RenderEndTag();
    writer.RenderEndTag();

    if (this._validationMode == PersistMode.Forms)
    {
        writer.RenderBeginTag(HtmlTextWriterTag.Tr);
        writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
        writer.RenderBeginTag(HtmlTextWriterTag.Td);

        // input hidden
        writer.AddAttribute(HtmlTextWriterAttribute.Type, "hidden");
        writer.AddAttribute(HtmlTextWriterAttribute.Id, "hipCodeEnc");
        writer.AddAttribute(HtmlTextWriterAttribute.Name, "hipCodeEnc");
        writer.AddAttribute(HtmlTextWriterAttribute.Value, this._hipCode);
        writer.RenderBeginTag(HtmlTextWriterTag.Input);
        writer.RenderEndTag();

        writer.RenderEndTag();
        writer.RenderEndTag();
    }

    writer.RenderEndTag();
}

Related Posts:

Saturday, November 27, 2004 5:32 AM

Comments

# re: CAPTCHA improvements
test

11/27/2004 5:58 AM by Anatoly Lubarsky

# re: CAPTCHA improvements
test2

11/28/2004 12:53 AM by Anatoly Lubarsky

# re: CAPTCHA improvements
You should enter only letters and numbers all the other signs might be too confuseing to the user.
I saw in code project an example with real images but this one seems better.
Thanks

11/29/2004 6:23 AM by yoav

# re: CAPTCHA improvements
Yoav: thanks.
Site is oriented to the professional users mostly, so I don't see the problem. Other signs right now are: "@,!,". Anyway there would come improvements and I'll take your advice into the account.

Btw, if anybody sees the ways to improve the captcha, please feel free to live comment (and your credit card number...) here.

11/29/2004 4:51 PM by Anatoly Lubarsky

# Modified CAPTCHA Control

1/20/2005 9:21 PM by michael stromberg

# re: CAPTCHA improvements
nice to hear u again.

3/24/2006 3:56 PM by my mp3 blog

# re: CAPTCHA improvements
nice to hear you too, what's your name, by the way ?

3/24/2006 4:03 PM by Anatoly Lubarsky

# re: Improvement to HIP CAPTCHA control for Blog Engines

Good ! thank the author.

5/25/2007 7:18 PM by Google排名

# re: Improvement to HIP CAPTCHA control for Blog Engines
thnx

5/13/2008 10:40 AM by resimler

# re: Improvement to HIP CAPTCHA control for Blog Engines
I saw in code project an example with real images but this one seems better .

1/31/2009 10:18 PM by proxy sites

Login

Subscribe via RSS

Article Categories

.Net Framework
ASP.NET Tips
C# Win32 API
HTML, CSS, Web
Javascript Tips
MSSQL Tips
System
System.Net
WebServices

Archives

(02) January, 2018
(01) June, 2013
(03) March, 2013
(02) February, 2013
(01) July, 2012
(01) April, 2012
(01) September, 2011
(01) August, 2011
(03) May, 2011
(01) December, 2010
(01) November, 2010
(01) October, 2010
(01) June, 2010
(01) May, 2010
(02) March, 2010
(01) January, 2010
(02) December, 2009
(03) September, 2009
(03) August, 2009
(09) July, 2009
(04) June, 2009
(03) May, 2009
(02) April, 2009
(03) March, 2009
(02) February, 2009
(02) January, 2009
(04) December, 2008
(04) November, 2008
(05) October, 2008
(04) September, 2008
(05) August, 2008
(04) July, 2008
(05) June, 2008
(07) May, 2008
(04) April, 2008
(03) March, 2008
(02) February, 2008
(03) January, 2008
(03) December, 2007
(05) November, 2007
(04) October, 2007
(05) September, 2007
(12) August, 2007
(11) July, 2007
(14) June, 2007
(13) May, 2007
(13) April, 2007
(10) March, 2007
(11) February, 2007
(14) January, 2007
(14) December, 2006
(12) November, 2006
(08) October, 2006
(09) September, 2006
(06) August, 2006
(08) July, 2006
(10) June, 2006
(09) May, 2006
(22) April, 2006
(25) March, 2006
(12) February, 2006
(14) January, 2006
(19) December, 2005
(17) November, 2005
(16) October, 2005
(16) September, 2005
(12) August, 2005
(14) July, 2005
(09) June, 2005
(12) May, 2005
(12) April, 2005
(20) March, 2005
(11) February, 2005
(12) January, 2005
(18) December, 2004
(13) November, 2004
(12) October, 2004
(14) September, 2004
(09) August, 2004
(23) July, 2004
(19) June, 2004
(29) May, 2004
(19) April, 2004
(16) March, 2004
(09) February, 2004
(06) January, 2004
(02) December, 2003
(01) November, 2003

Post Categories

.Net and C#
Android
Antispam
App. Development
Architecture
ASP.NET
Blogging
Deprecated Projects
Facebook Platform
Fun
Google
iOS
Javascript
Misc.
MSSQL
Music
My Games
Performance
Roller
Social Networks
Tools
Visual Studio
Web 2.0
WebServices

About Me

linkedin Profile
Recs
Who am I

My Sites

Billy Beet
x2line blogs