“字母跟数字混合的验证码技术”:
验证码技术是网站开发过程中比较重要的技术,可以防止非法人员利用注册机或者登陆工具来攻击我们的网站。废话少说,切入正题。主要思路是:引用Using System.Drawing命名空间,利用Graphics的FromImage方法创建一个画布,同时设置画布的宽和高,然后通过Graphics类的DrawString方法随机生成的字符串绘制到画布中,绘制验证码的同时,在画布中利用SetPixel方法绘制一些色点,从而防止非法人员利用机器人来进行登陆。当我们绘制验证码完毕后,在需要验证码的页面中利用Image空间将其显示出来,Image控件显示验证码的HTML源码设置如下:
<asp:Image ID="Image1" src="CheckCode.aspx" runat="server" Height="20px" Width="80px"/>
注意:当然加入src属性时程序会提示src不是元素Image的有效属性,这不影响程序的执行。由于验证码存放在客户端机器的Cookie中,因此在调用的时候可以将文本框中的数据和Cookie中的数据进行对照。从客户端的机器中取出Cookie值如下代码:HttpCookie cookie=Request.Cookies["CheckCode"];
举个例子:主要有:输入验证码txtCode,显示验证码Image1,提交/取消 btnOk/btnCancel主要代码如下:
(1)在绘制验证码之前,必须生成随机字符串。代码如下:

 1    private string GenerateCheckCode()
 2    {
 3        int number;
 4        char code;
 5        string checkCode = String.Empty;
 6        Random random = new Random();
 7        for (int i = 0; i < 4; i++)
 8        {
 9            number = random.Next();
10
11            if (number % 2 == 0)
12                code = (char)('0' + (char)(number % 10));
13            else
14                code = (char)('A' + (char)(number % 26));
15
16            checkCode += code.ToString();
17        }
18
19        Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
20        return checkCode;
21    }
22
23

代码比较简单我就不在解释。
(2)字符串生成后,接下来就是将该字符串绘制成图片显示出来。代码如下:

 1   private void CreateCheckCodeImage(string checkCode)
 2    {
 3        if (checkCode == null || checkCode.Trim() == String.Empty)
 4            return;
 5        System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);                 Graphics g = Graphics.FromImage(image);
 6        try
 7        {
 8            //生成随机生成器
 9            Random random = new Random();
10            //清空图片背景色
11            g.Clear(Color.White);
12            //画图片的背景噪音线
13            for (int i = 0; i < 2; i++)
14            {
15                int x1 = random.Next(image.Width);
16                int x2 = random.Next(image.Width);
17                int y1 = random.Next(image.Height);
18                int y2 = random.Next(image.Height);
19                g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
20            }
21
22            Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));
23            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);
24            g.DrawString(checkCode, font, brush, 2, 2);
25            //画图片的前景噪音点
26            for (int i = 0; i < 100; i++)
27            {
28                int x = random.Next(image.Width);
29                int y = random.Next(image.Height);
30                image.SetPixel(x, y, Color.FromArgb(random.Next()));
31            }
32
33            //画图片的边框线
34            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
35            System.IO.MemoryStream ms = new System.IO.MemoryStream();
36            image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
37            Response.ClearContent();
38            Response.ContentType = "image/Gif";
39            Response.BinaryWrite(ms.ToArray());
40        }
41        finally
42        {
43            g.Dispose();
44            image.Dispose();
45        }
46    }
47
48

以上带都是我运行过的,同时参照MSDN文档,大家放心使用。如有错误请联系我QQ:1264373,谢谢!
最好引用比较的代码是:

 1    protected void Button1_Click(object sender, EventArgs e)
 2    {
 3        HttpCookie cookie = Request.Cookies["CheckCode"];
 4        if (cookie.Value == this.txtCode.Text.Trim())
 5        {
 6            Response.Write("<script>alert('验证码正确!')</script>");
 7        }
 8        else
 9        {
10            Response.Write("<script>alert('验证码错误!')</script>"); 
11        }
12    }

转载于:https://www.cnblogs.com/phcis/archive/2008/01/07/1029230.html

【转】ASP.NET中“字母和数字混合的验证码”详解相关推荐

  1. 正则表达式 匹配中文,英文字母和数字及_长度详解

    http://www.juapk.com/thread-2472-1-1.html 匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z]  数字:[0-9] 匹配中文,英文字母和数字及 ...

  2. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

    题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字符的个数, 在主函数中输入字符串以及输出上述结果. 只要结果,别输出什么提示信息. 输入 一行字符串 输出 统计数据, ...

  3. vc获取n卡编号_电脑入门知识:通过显卡型号中字母和数字判断显卡性能

    电脑入门知识:通过显卡型号中字母和数字判断显卡性能 我们这些外行人看显卡,最高水平也就看看显卡品牌说说显存大小.所以一个称号我们受之泰然:菜鸟!下面的内容可以帮助我们对显卡的了解更深入一点,我们先来看 ...

  4. 统计字符个数的c语言程序设计,编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。...

    编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数.在主函数中输入字符串以及输出上述结果. [c源程序] #include int letter,digit,space ...

  5. php怎样规定密码混合,PHP产生随机字串,可用来自动生成密码 默认长度6位 字母和数字混合...

    /** * 产生随机字串,可用来自动生成密码 默认长度6位 字母和数字混合 * @param string $len 长度 * @param string $type 字串类型 * 0 字母 1 数字 ...

  6. 【C】编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

    //编写一个函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其他字符的个数, //在主函数中输入字符串以及输出上述的结果. #include <stdio.h> #includ ...

  7. 【python作业】编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果。

    编写一个函数,由实参传来一个字符串,统计此字符串中字母和数字的个数,在主函数中输入字符串并输出上述的结果. def fun(s):count1 = 0count2 = 0for i in s:if i ...

  8. 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

    题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字符的个数,在主函数中输入字符串以及输出上述结果. 只要结果,别输出什么提示信息. 输入 一行字符串 输出 统计数据,4 ...

  9. 7.9编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

    //C程序设计第四版(谭浩强) //章节:第七章 用函数实现模块化程序设计 //题号:7.9 //题目:编写一个函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其他字符的个数, //在主函 ...

最新文章

  1. 虚拟网卡技术-VETH、MACVLAN、IPVLAN
  2. SqlServer一些用法
  3. Java字符串String比较不要用==原因
  4. 嵌入式编程-C语言使用小技巧
  5. python中的ord函数
  6. 【多线程高并发】深入浅出volatile关键字
  7. Linux蜂鸣器实验(使用上一节子系统思想,摈弃了自己配置寄存器的繁琐操作)
  8. java 记录一个类加载顺序的坑
  9. [svc]容器网络学习索引及网络监控
  10. JZ1-二维数组中的查找
  11. 《程序是怎样跑起来的》七
  12. razorPage三元运算符使用注意
  13. Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js6
  14. 实例:用C#.NET手把手教你做微信公众号开发(1)--接入
  15. 一种基于labview的类Office XP风格的菜单控件的用户开发界面
  16. Nacos+Gateway503错误,No servers available for service
  17. 千万别惹程序员,否则他会在代码注释里告诉这家公司有多坑
  18. nginx反向代理到第三方服务商的服务器
  19. Shadow 腾讯插件化——深度解剖框架设计
  20. 好嗨哟,这5个超牛的资源网站,让你轻松无忧找资源!

热门文章

  1. 2021护理正高考试成绩查询,中国卫生人才网:2021年护资考试成绩现可查询!
  2. php导出excel方法,PHP导出EXCEL简单实用方法
  3. Spring Cloud Alibaba 系统保护 - 限流与熔断:Sentinel 在项目中的最佳实践
  4. NSInvocation
  5. LNMP架构——OpenResty实现缓存前移(到达Nginx前端层面)
  6. windows下重启mysql数据库_windows下重启mysql的方法
  7. 向量时钟同步算法_如何让超级下载算法在不同CortexM内核下也能跑?
  8. php数据库缓存类,常见php数据文件缓存类汇总
  9. python字典作业_python第一天作业:字典
  10. mysql表文件被删_mysql表物理文件被误删的解决方法