Desenvolvimento - ASP. NET

Inserindo Captcha com C#

Neste artigo será demonstrado com um pequeno exemplo como inserir o CAPCTHA em um formulário usando a linguagem c# e o Visual Studio 2005.

por Fernando Medeiros



Olá, neste meu primeiro artigo aqui na Linha de Código, quero demonstrar com um pequeno exemplo como utilizar o CAPCTHA.

CAPTCHA é um acrônimo da expressão "Completely Automated Public Turing test to tell Computers and Humans Apart" (teste de Turing público completamente automatizado para diferenciar entre computadores e humanos).

Um tipo comum de CAPTCHA requer que o usuário identifique as letras ou números de uma imagem distorcida, às vezes com a adição de uma seqüência obscurecida das letras ou dos dígitos que apareça na tela.

CAPTCHAs são utilizados para impedir que softwares automatizados execute ações que degradam a qualidade do serviço de um sistema dado, devido à despesa do abuso ou do recurso.(Origem: Wikipédia).

Para mais informações sobre o conceito bem como os criadores acesse: http://www.captcha.net/

Dedos nas teclas

1º passo: Criar uma página com um controle de imagem, dois labels, um textBox, um button. Estou usando o Visual Studio 2005.

  • Acesse o menu file, new, Project, escolha a linguagem C# e o tipo web.
  • Coloquei o nome da aplicação de MyCaptcha.
  • Inserir os controles citados acima.

Listagem 1: Default.aspx

<div>
<div>
<asp:Label ID="lbl_Nome" runat="server" Text="Nome:">
<asp:TextBox ID="txt_Nome" runat="server" MaxLength="6">
</div>
<div>
<asp:Image ID="im_BitMap" height="20" runat="server" src="ImagemCaptcha.aspx" Width="144px" />
<asp:Button ID="btn_Enviar" runat="server" Text="Enviar" OnClick="btn_Enviar_Click" />
</div>
<asp:Label ID="lbl_Mensagem" runat="server">
</div>

OBS: Não esqueça de referenciar a classe componente da imagem acima.

Listagem 2: Default.aspx.cs

protected void btn_Enviar_Click(object sender, EventArgs e)
{
//Veificação de autenticidade
if (Page.IsValid && (txt_Nome.Text.ToString() == Session["strRandom"].ToString()))
{
lbl_Mensagem.Text = "Página validada!";
}
else
{
lbl_Mensagem.Text = "Digite os dados conforme a imagem!";
}
}

2º passo: Criar outra página conforme feito no 1º passo, chamei-a de ImagemCaptcha, na qual utilizaremos apenas o code-behind desta para construir o código que é responsável por gerar a imagem e controlar as mudanças dos valores da imagem.

  • Importe as classes: System.Drawing, System.Drawing.Imaging e System.Drawing.Text.
  • No Page_Load da página coloque o seguinte código:
  • ImagemCaptcha.aspx
  • Não acrescentar nenhum código.

Listagem 3: ImagemCaptcha.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
//Instanciando a classe BitMap e passando as dimensões da imagem
Bitmap bitmap = new Bitmap(144, 20);
Graphics grafics = Graphics.FromImage(bitmap);

//Background da imagem
grafics.Clear(Color.Black);
grafics.TextRenderingHint = TextRenderingHint.SystemDefault;

//Atributos do texto/números
Font font = new Font("Arial", 10, FontStyle.Strikeout);

//Declaração da string que receberá os valores
string strRandom = string.Empty;

//Declaração de um array com o tamanho de caracteres desejado
int[] array = new int[6];

//Instanciando a classe Random
Random random = new Random();
//Loop para escolha randômica dos valores e concatenação dos mesmos
for (int i = 0; i < contenttype = "image/GIF"> }

Bom, feito isto é só rodar sua aplicação. Segue as telas abaixo para exemplificar.

Dados incorretos

Figura 1: Dados incorretos!

Dados corretos

Figura 2: Dados corretos!

 Página validada

Figura 3: Página validada!

Conclusão

Espero que esta pequena amostra da utilização do Captcha com números seja útil para o seu aprendizado. Em outra oportunidade mostrarei um exemplo utilizando letras e números. Se você tiver alguma dúvida é só deixar um post que responderei com todo prazer.

Fernando Medeiros.

Fernando Medeiros

Fernando Medeiros - Bacharel em Sistemas de Informação, trabalho com desenvolvimento de sistemas para Web com C# e ASP.NET.