.net中的图片验证

转载 2007年09月18日 12:34:00

为了防止恶意访问,现在的登录页面一般都有一个验证框。

系统首先生成一个随机数,保存在session中,并且显示成bitmap格式,用户输入正确的数字方可登录。

这个是页面的后台代码,只要建立好前台页面后把下面的代码拷贝过去就行了

在需要调用验证码的地方用下面这样的代码调用就行了

<img src="../PageControl/Security/ValidateCode.aspx?codeLen=5&aFineness=90&ImgWidth=85&PosX=4&PosY=1&FontFamily=Arial&FontSize=14&FontStyle=3"></img>

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace VerCommunity.WebForum.PageCtrl.Security
{
 /// <summary>
 /// ValidateCode 验证码生成页
 /// </summary>
 public class ValidateCode : System.Web.UI.Page
 {
  // 验证码长度
  private int codeLen=8;
  // 图片清晰度
  private int fineness=80;
  // 图片宽度
  private int imgWidth=128;
  // 图片高度
  private int imgHeight=24;
  // 字体家族名称
  private string fontFamily="Times New Roman";
  // 字体大小
  private int fontSize=14;
  // 字体样式
  private int fontStyle=0;
  // 绘制起始坐标 X
  private int posX=0;
  // 绘制起始坐标 Y
  private int posY=0;

  //------------------------------------------------------------
  // ValidateCode.aspx 页面加载函数
  //------------------------------------------------------------
  private void Page_Load(object sender, System.EventArgs e)
  {
   #region 读取 Request 传递参数
   // 获取代码长度设置
   if(Request["CodeLen"]!=null)
   {
    try
    {
     codeLen=Int32.Parse(Request["CodeLen"]);

     // 规定验证码长度
     if(codeLen<4 || codeLen>16)
      throw new Exception("验证码长度必须在4到16之间");
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 获取图片清晰度设置
   if(Request["Fineness"]!=null)
   {
    try
    {
     fineness=Int32.Parse(Request["Fineness"]);

     // 验证清晰度
     if(fineness<0 || fineness>100)
      throw new Exception("图片清晰度必须在0到100之间");
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 获取图片宽度
   if(Request["ImgWidth"]!=null)
   {
    try
    {
     imgWidth=Int32.Parse(Request["ImgWidth"]);

     if(imgWidth<16 || imgWidth>480)
      throw new Exception("图片宽度必须在16到480之间");
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 获取图片高度
   if(Request["ImgHeight"]!=null)
   {
    try
    {
     imgWidth=Int32.Parse(Request["ImgHeight"]);

     if(imgWidth<16 || imgWidth>320)
      throw new Exception("图片高度必须在16到320之间");
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 获取验证码字体家族名称
   if(Request["FontFamily"]!=null)
   {
    fontFamily=Request["FontFamily"];
   }

   // 获取验证码字体大小
   if(Request["FontSize"]!=null)
   {
    try
    {
     fontSize=Int32.Parse(Request["FontSize"]);

     if(fontSize<8 || fontSize>72)
      throw new Exception("字体大小必须在8到72之间");
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 获取字体样式
   if(Request["FontStyle"]!=null)
   {
    try
    {
     fontStyle=Int32.Parse(Request["FontStyle"]);
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 验证码绘制起始位置 X
   if(Request["PosX"]!=null)
   {
    try
    {
     posX=Int32.Parse(Request["PosX"]);
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }

   // 验证码绘制起始位置 Y
   if(Request["PosY"]!=null)
   {
    try
    {
     posY=Int32.Parse(Request["PosY"]);
    }
    catch(Exception Ex)
    {
     throw Ex;
    }
   }
   #endregion

   string validateCode=CreateValidateCode();

   // 生成BITMAP图像
   Bitmap bitmap=new Bitmap(imgWidth, imgHeight);

   // 给图像设置干扰
   DisturbBitmap(bitmap);

   // 绘制验证码图像
   DrawValidateCode(bitmap, validateCode);

   // 保存验证码图像,等待输出
   bitmap.Save(Response.OutputStream, ImageFormat.Gif);
  }

  #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

  //------------------------------------------------------------
  // 随机生成验证码,并保存到SESSION中
  //------------------------------------------------------------
  private string CreateValidateCode()
  {
   string validateCode="";

   // 随机数对象
   Random random=new Random();

   for(int i=0; i<codeLen; i++)
   {
    // 26: a - z
    int n=random.Next(26);

    // 将数字转换成大写字母
    validateCode+=(char)(n+65);
   }

   // 保存验证码
   Session["ValidateCode"]=validateCode;

   return validateCode;
  }

  //------------------------------------------------------------
  // 为图片设置干扰点
  //------------------------------------------------------------
  private void DisturbBitmap(Bitmap bitmap)
  {
   // 通过随机数生成
   Random random=new Random();

   for(int i=0; i<bitmap.Width; i++)
   {
    for(int j=0; j<bitmap.Height; j++)
    {
     if(random.Next(100)<=this.fineness)
      bitmap.SetPixel(i, j, Color.White);
    }
   }
  }

  //------------------------------------------------------------
  // 绘制验证码图片
  //------------------------------------------------------------
  private void DrawValidateCode(Bitmap bitmap, string validateCode)
  {
   // 获取绘制器对象
   Graphics g=Graphics.FromImage(bitmap);

   // 设置绘制字体
   Font font=new Font(fontFamily, fontSize, GetFontStyle());

   // 绘制验证码图像
   g.DrawString(validateCode, font, Brushes.Black, posX, posY);
  }

  //------------------------------------------------------------
  // 换算验证码字体样式:1 粗体 2 斜体 3 粗斜体,默认为普通字体
  //------------------------------------------------------------
  private FontStyle GetFontStyle()
  {
   if(fontStyle==1)
    return FontStyle.Bold;
   else if(fontStyle==2)
    return FontStyle.Italic;
   else if(fontStyle==3)
    return FontStyle.Bold | FontStyle.Italic;
   else
    return FontStyle.Regular;
  }
 }
}

 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1772919 

相关文章推荐

ASP.NET图片验证码的实现

ASP.NET     图文 验证码          虽然我认为图片验证码没有什么用,并且也特别的烦人(每次上移动的网站都要频频地输入验证码),但人家要求,也只好弄一个...

vb.net 生成验证码图片-转载

调用     Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha...

asp.net 生成图片验证码

如上图所示的验证码看一下后台是怎么写的后台给了一个图片img图片按钮,链接指向的是另外一个页面,如图 在这个图片按钮上imgurl指向的是一个.aspx页面,在vaildateCode1.aspx页...

asp.net生成图片验证码(数字)

经常会用到验证码生成 所以直接放在博客上面方便自己查阅

ASP.NET 图片验证码登陆代码

ASP.NET图片验证码登陆程序

ASP.NET中常用功能代码总结(2)——生成验证图片

生成随机的验证图片 使用方法: 1///调用函数将验证码生成图片 2            this.CreateCheckCodeImage(GenerateCheck...

如何创建4位数字验证码图片(ASP.NET MVC2环境下)

基于mvc2架构下的验证码由一个controll中的action负责管理view上的一个动作,这是在controll中创建验证码图片的过程。 public FileResult ConfirmCode...

python 图片验证码代码分享 详细出处参考:http://www.jb51.net/article/30731.htm

#coding: utf-8 import Image,ImageDraw,ImageFont,os,string,random,ImageFilter def initChars(): """...

JS+ASP.NET 图片验证码

JS图片验证码

asp.net 图片验证码

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)