/* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */
 public class ValidateCode : System.Web.UI.Page
 {
  private void Page_Load(object sender, System.EventArgs e)
  {
   this.CreateCheckCodeImage(GenerateCheckCode());
  }

#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

private string GenerateCheckCode()
  {
   int number;
   char code;
   string checkCode = String.Empty;

System.Random random = new Random();

for(int i=0; i<5; i++)
   {
    number = random.Next();

if(number % 2 == 0)
     code = (char)('0' + (char)(number % 10));
    else
     code = (char)('A' + (char)(number % 26));

checkCode += code.ToString();
   }

Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));

return checkCode;
  }

private void CreateCheckCodeImage(string checkCode)
  {
   if(checkCode == null || checkCode.Trim() == String.Empty)
    return;

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
   Graphics g = Graphics.FromImage(image);

try
   {
    //生成随机生成器
    Random random = new Random();

//清空图片背景色
    g.Clear(Color.White);

//画图片的背景噪音线
    for(int i=0; i<25; i++)
    {
     int x1 = random.Next(image.Width);
     int x2 = random.Next(image.Width);
     int y1 = random.Next(image.Height);
     int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
    }

Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
    System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
    g.DrawString(checkCode, font, brush, 2, 2);

//画图片的前景噪音点
    for(int i=0; i<100; i++)
    {
     int x = random.Next(image.Width);
     int y = random.Next(image.Height);

image.SetPixel(x, y, Color.FromArgb(random.Next()));
    }

//画图片的边框线
    g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    Response.ClearContent();
    Response.ContentType = "image/Gif";
    Response.BinaryWrite(ms.ToArray());
   }
   finally
   {
    g.Dispose();
    image.Dispose();
   }
  }
 }

  假如以上验证码生成器页面名为:CheckCode.aspx,那么在登录页面中使用“<IMG>” 这个 HTML 元素来显示生成的验证码图片:<IMG src="CheckCode.aspx">
  在登录页面的登录按钮的处理事件中使用以下代码判断验证码:

private void btnLogin_Click(object sender, System.Web.UI.ImageClickEventArgs e)
  {
   if(Request.Cookies["CheckCode"] == null)
   {
    lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";
    lblMessage.Visible = true;
    return;
   }

if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
   {
    lblMessage.Text = "验证码错误,请输入正确的验证码。";
    lblMessage.Visible = true;
    return;
   }



  }

效果图:

转载于:https://www.cnblogs.com/foson/archive/2006/08/12/475135.html

ASP.NET验证码的实现相关推荐

  1. ASP.net 验证码(C#)

     ASP.net 验证码(C#) /* Copyright all(c) 2005 ZhongFeng, http://blog.csdn.net/SW515 */  public class Val ...

  2. C#发现之旅第九讲 ASP.NET验证码技术

    C#发现之旅第九讲 ASP.NET验证码技术 袁永福 2008-5-15 系列课程说明     为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅"的技术讲 ...

  3. ASP.NET 验证码示例

    <%@ Page Language="C#" %> <%@ Import Namespace="System.Drawing" %> & ...

  4. asp.net验证码图片生成示例

    验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话"内行看门道,外行看热闹!",仔细琢磨一下还真的是那么一回事.对于怎么 ...

  5. ASP.net 验证码登录

    一.说明 此文是小白在学习张晨光老师的视频教学<<Asp.Net WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家. ...

  6. ASP.NET验证码相关问题

    作业:验证码要求:(1)验证码应该是图片格式,不能是文字格式,即无法用鼠标选中.(2)验证码上应该有噪点和干扰线条.(3)验证码应该回避相似字符,如"0"和"o" ...

  7. asp数字验证码源代码

    在这里我们用到3个页面分别是:index.asp   code.asp     display.asp   当然,名字你可以随便取,下面我们开始了: 一.   index.asp 中代码: <! ...

  8. asp带验证码的用户登录及校验代码实现

    在参考了各种资料之后,实现了用户登录模块.主要难点集中在随机验证码的实现以及验证码在页面间的传递操作.具体实现代码如下: login.asp: <% FUNCTION GEN_KEY(digit ...

  9. ASP对接验证码短信接口demo

    本文为您提供ASP版本的验证码短信接口对接DEMO示例 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> <% ...

最新文章

  1. 吉大c 语言程序设计奥鹏作业,吉大19秋学期《C语言程序设计》在线作业一【满分答案】...
  2. 桌面虚拟化最佳实践4—存储规划(下)
  3. win 二进制门安装mysql_windows安装mysql2 gem(包括windows 7 64位)
  4. [COCI2015]ZGODAN
  5. netcore一键部署到linux服务器以服务方式后台运行
  6. DenseNet简单总结
  7. vue 中二维码的使用和工具比较
  8. yii 执行指定迁移文件_laravel的迁移文件
  9. SecondaryNameNode的Inconsistent checkpoint fields异常
  10. apache+php
  11. Kiwi browser 手机谷歌浏览器如何同步谷歌扩展插件
  12. 你的代码会说话吗?(上)
  13. BPM平台在企业业务系统中使用的价值讨论
  14. ML学习分享系列3_计算广告小窥[下]要啥自行车!
  15. 2021年制冷与空调设备运行操作免费试题及制冷与空调设备运行操作操作证考试
  16. 「Sqlserver」数据分析师有理由爱Sqlserver之二-像使用Excel一般地使用Sqlserver
  17. 如何将 Outlook PST 文件内容导入 Gmail
  18. 再也不怕自己用江苏图采上传证件照了(亲测有效)
  19. 首推互联网银行平台 金融壹账通助力银行破解转型难题
  20. 大话西游:人生百年,谁不曾大闹天宫,谁不曾头上紧箍,谁不曾爱上层楼,谁不曾孤单上路。...

热门文章

  1. WebApi单元测试记录
  2. javascript 停止事件冒泡以及阻止默认事件冒泡
  3. chrome插件 实现微博言论监控
  4. 如何使用 indent 美化你的代码
  5. 5_Windows下利用批处理切换IP地址
  6. 使用Ansible进行硬件引导
  7. bio-linux_Bio-Linux:稳定,可移植的科学研究Linux发行版
  8. git32位服务器构建_如何构建自己的Git服务器
  9. vs2015软件系统开源_特别版:2015年开源新闻
  10. linux 开源谷歌浏览器_开发人员浏览器,Google开源版本等