ASP.NET验证码生成与识别

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Drawing2D;
  5 using System.Text;
  6 using System.Web;
  7 using System.Web.SessionState;
  8
  9 namespace 验证码的生成与识别
 10 {
 11     /// <summary>
 12     /// ValidCodeHandler 的摘要说明
 13     /// </summary>
 14     public class ValidCodeHandler : IHttpHandler,IRequiresSessionState
 15     {
 16
 17         public void ProcessRequest(HttpContext context)
 18         {
 19             //设置输出流的MIME类型
 20             //context.Response.ContentType = "image/png";
 21
 22             string strValidCode = GetValidCode(5);                                                  // 产生5位随机字符
 23
 24             //如果要使用context.Session,需要添加命名空间using System.Web.SessionState;,然后再继承IRequiresSessionState接口
 25             context.Session["ValidCode"] = strValidCode;                                            //将字符串保存到Session中,以便需要时进行验证
 26
 27             Bitmap image = new Bitmap(120, 40);                                                     //定义宽120像素,高30像素的数据定义的图像对象
 28             Graphics g = Graphics.FromImage(image);                                                 //绘制图片
 29             try
 30             {
 31
 32                 Random random = new Random();                                                       //生成随机对象
 33                 g.Clear(Color.White);                                                               //清除图片背景色
 34
 35                 for (int i = 0; i < 25; i++)                                               // 随机产生图片的背景噪线
 36                 {
 37                     int x1 = random.Next(image.Width);
 38                     int x2 = random.Next(image.Width);
 39                     int y1 = random.Next(image.Height);
 40                     int y2 = random.Next(image.Height);
 41                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 42                 }
 43
 44                 Font font = new System.Drawing.Font("微软雅黑", 20, (System.Drawing.FontStyle.Bold));  //设置图片字体风格
 45                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 3, true);//设置画笔类型
 46                 g.DrawString(strValidCode, font, brush, 5, 2);                            //绘制随机字符
 47
 48
 49                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);    //绘制图片的前景噪点
 50
 51                 System.IO.MemoryStream ms = new System.IO.MemoryStream();                           //建立存储区为内存的流
 52                 image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);                              //将图像对象储存为内存流
 53                 context.Response.ClearContent();                                                    //清除当前缓冲区流中的所有内容
 54
 55                 context.Response.ContentType = "image/png";
 56                 //context.Response.ContentType = "image/Gif";                                         //设置输出流的MIME类型
 57                 context.Response.BinaryWrite(ms.ToArray());                                         //将内存流写入到输出流
 58             }
 59             finally
 60             {
 61                 g.Dispose();
 62                 image.Dispose();
 63             }
 64         }
 65
 66         /// <summary>
 67         /// 生成随机字符串
 68         /// </summary>
 69         /// <param name="num">随机字符的个数</param>
 70         /// <returns>返回随机产生的字符串</returns>
 71         private string GetValidCode(int num)
 72         {
 73             //定义一个允许的字符组成的字符串
 74             string strRandomCode = "ABCD1EF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ";                                //定义要随机抽取的字符串
 75             //char[] chaStr = strRandomCode.ToCharArray();                                                //将定义的字符串转成字符数组
 76             StringBuilder sbValidCode = new StringBuilder();                                            //定义StringBuilder对象用于存放验证码
 77             //随机数生成器,用于随机产生验证码中字符
 78             Random rnd = new Random();                                                                   //随机函数,随机抽取字符
 79             for (int i = 0; i < num; i++)
 80             {
 81                 //随机获取一个字符
 82                 char a = strRandomCode[rnd.Next(0, strRandomCode.Length)];
 83                 //
 84                 sbValidCode.Append(a);
 85                 //以strRandomCode的长度产生随机位置并截取该位置的字符添加到StringBuilder对象中
 86                 //sbValidCode.Append(strRandomCode.Substring(rnd.Next(0, strRandomCode.Length), 1));
 87             }
 88             return sbValidCode.ToString();
 89         }
 90
 91
 92
 93         public bool IsReusable
 94         {
 95             get
 96             {
 97                 return false;
 98             }
 99         }
100     }
101 }
时间: 2024-10-25 18:09:02

ASP.NET验证码生成与识别的相关文章

asp.net验证码[生成与刷新]防止恶意注册图文并茂包括

欢迎光临博客; 首先我们来分析一下验证码的实现方式; 首先验证码是一个图片包含随机生成的文字,我们可以使用一个页面, 通过程序绘制页面上的内容和干扰像素(噪点),然后状态保持方式, 比对页面上比用户输入的内容和刚刚生成的内容, 这样可以到到验证码的效果. 具体在asp.net做法如下 验证码以.dll结尾 1.首先我们可以在"工具箱"新建一个选项卡来放"验证码控件" 2.比如新建一个验证码选项卡 3.将验证码控件"可以自行下载也可在","

验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数字+小写.数字+大写.数字+大小写等情况. 四位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数字+小写.数字+大写.数字+大小写等情况. 简单验证码识别:验证码类型 : 数字+字母, 纯英文, 纯数字,计算题 英数_验证码识别:纯数字,纯英文,数字+英文 中英数_验证码识别:英文.数

ASP.NET——验证码的制作

        我们在登陆网站,发表博客或者提交评论的时候,经常会遇到填写验证码这一项,当时感觉挺神奇的样子,终于在牛腩新闻发布系统里接触到了,在这里小小的总结下.         用到的东东有三个:一个aspx页面,一个图片         首先,建立一个aspx页面.         <%@ WebHandler Language="C#" Class="Picture" %> using System; using System.Web; usin

利用谷歌 kaptcha 进行验证码生成

1 package main.com.smart.controller; 2 3 import com.google.code.kaptcha.Producer; 4 import main.com.smart.utils.CaptchaProducer; 5 import main.com.smart.utils.RedisClient; 6 import org.apache.log4j.Logger; 7 import org.apache.log4j.spi.LoggerFactory;

【转】Android 二维码 生成和识别(附Demo源码)--不错

原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXin

随机验证码生成代码 (转)

随机验证码生成代码 package com.zuidaima.core.util; import java.util.Random; public class RandomUtil { public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public static final String LETTERCHAR = "abc

Web---图片验证码生成教程详解-从简单到复杂-从本地到前后台

首先,我们先来看本地如何生成图片验证码的,再来写输出到网页的验证码如何实现. 先来看最简单的-实现的功能是,将一个字符串变成图片写入到文件中 实现代码: package cn.hncu.img; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOE

Barcode Professional for ASP.NET ASP.NET条码生成和打印功控件介绍

Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET Mobile Web站点). 具体功能: Neodynamic Barcode Professional for ASP.NET是最灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加先进的条码生成和打印功能到您的ASP.NET Web解决方案(包括ASP.NET

ajax加一般处理程序或ASP.NET 后台生成带着二维码的图片

ajax加一般处理程序生成带着二维码的图片 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head