图片验证码

///<Author>
///图形验证码生成页面
///Abraxas@163.com
///引用方式:<asp:Image ImageUrl="AbraxasValCode.aspx?n=6"></asp:Image>(n为验证码位数)
///</Author>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;

namespace Abraxas
{
 /// <summary>
 /// AbraxasValCode 的摘要说明。
 /// </summary>
 public class AbraxasValCode : System.Web.UI.Page
 {
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   string valCode = RandomString(int.Parse(Request.QueryString["n"]));
   Session.Add("ValCode", valCode);
   DrawImage(valCode);
  }

  //生成随机字符串
  private string RandomString(int bit)
  {
   string chars = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z" ;
   string[] charArray = chars.Split(',');
   string result = "";
   Random rdm = new Random();
   for (int i = 0; i < bit; i++)
   {
    result += charArray[rdm.Next(36)];
   }
   return result;
  }

  //将验证码绘成图形
  private void DrawImage(string valCode)
  {
   //生成位图
   Bitmap bmp = new Bitmap(valCode.Length*16, 25);
   Graphics g = Graphics.FromImage(bmp);
   try
   {
    g.Clear(Color.White);

    //定义颜色和字体集
    Color[] c = {Color.Red, Color.Green, Color.Navy, Color.DarkCyan, Color.Blue, Color.Purple};
    string[] fonts = {"Microsoft Sans Serif", "Times New Roman", "Lucida Console", "Arial", "Verdana"};

    //绘制背景网格
    Pen p = new Pen(Color.LightGray, 0);
    int y = 5;
    do
    {
     g.DrawLine(p, 0, y, bmp.Width, y);
     y += 5;
    }
    while(y < bmp.Height);
    int x = 5;
    do
    {
     g.DrawLine(p, x, 0, x, bmp.Height);
     x += 5;
    }
    while(x < bmp.Width);

    //输出验证码字符
    Random rdm = new Random();
    for (int i = 0; i < valCode.Length; i++)
    {
     int ci = rdm.Next(c.Length);
     int fi = rdm.Next(fonts.Length);
     Font f = new Font(fonts[fi], 12, FontStyle.Bold);
     Brush b = new SolidBrush(c[ci]);
     g.DrawString(valCode.Substring(i,1), f, b, 5+(i*14), rdm.Next(2,5));
    }

    //绘制边框
    g.DrawRectangle(p, 0, 0, bmp.Width-1, bmp.Height-1);

    //输出到页面
    MemoryStream ms = new MemoryStream();
    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    Response.Cache.SetNoStore();
    Response.ClearContent();
    Response.ContentType = "image/Gif";
    Response.BinaryWrite(ms.ToArray());
    Response.End();
   }
   finally
   {
    g.Dispose();
    bmp.Dispose();
   }
  }

  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}

阅读更多
上一篇在一个网页中显示不同种类的新闻
下一篇A Beginner's Guide to Pointers
想对作者说点什么? 我来说一句

JAVA图片验证码 图片验证码

2009年08月25日 30KB 下载

asp图片验证码

2018年02月08日 28KB 下载

asp.net图片验证码

2009年06月10日 2KB 下载

PHP 图片验证码.rar

2010年06月15日 13KB 下载

一个asp.net图片验证码

2008年08月30日 2KB 下载

图片验证码9000多张

2018年01月16日 21.18MB 下载

Jsp-图片验证码及刷新

2018年05月20日 53KB 下载

Java实现的图片验证码

2010年01月01日 10KB 下载

LoadRunner录制图片验证码

2011年10月20日 31KB 下载

没有更多推荐了,返回首页

关闭
关闭