黑马程序员之c#学习笔记:用户登录验证码的设计
来源:互联网 发布:循环冗余检查算法 编辑:程序博客网 时间:2024/05/01 03:07
--------------------------------------------------- 2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
很多网站登录,不仅需要输入用户名和密码,还需要输入验证码。但是这个验证码不是不变的,而是变化的。并且这些验证码添加了白噪声和背景噪线。之前也看过好几本关于网站开发的书,也接触了好几个关于这方面的编程方法,分享给大家。
//这个函数主要就是为了产生随机验证码的内容。也就是随机数
private string code(int a)//形参a是代表要生成几位随机数。可以在其它函数中调用这个函数。
{string str="ABCD1EF2GH3JK4LM5NP6QR7ST8UV9WXY0Z";
char[] ch=str.ToCharArray();
StringBuilder strsb=new StringBuilder();
Random rd=new Random();
for(int i=0;i<a;i++)
{
strsb.Append(str.Substring(rd.Next(0,str.Length),1));//以str的长度产生随机位置,截取该位置的字符添加到strsb中。
}
return strsb.Tostring();
}
//有了随机数,还需要经过一些处理,比如加入白噪声,背景噪线等等。
public void ProcessRequest(HttpContext context)
{string str = code(4);
context.Session["strcode"] = str;
Bitmap image = new Bitmap(120, 30);
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);
}
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 3, true);
g.DrawString(str, new System.Drawing.Font("Arial", 20, (System.Drawing.FontStyle.Bold)), brush, 5, 2);
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, ImageFormatConverter.Gif);
context.Response.ClearContent();
context.Response.ContentType = "image/Gif";
context.Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
//这边需要注意的是,这个函数是我们在建立一个网站项目的时候,在这个项目里面添加一个一般处理程序。然后就会自动生成这个函数我们只需要在里面添加这些代码就可以了。注:当我们使用一般处理程序的时候,此方法是自动被调用的。这个方法的大概思路就是:将我们生成的四位随机数再生成图片信息,然后对图片添加一些噪声保存到输出流中。第二段代码看上去很长,其实只要知道验证码的生成过程就行了。里面的很多函数也许不是很熟悉,但这不是问题,因为我们不知道的函数太多了,只有多用才能熟练的掌握
--------------------------------------------------- 2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
- 黑马程序员之c#学习笔记:用户登录验证码的设计
- 黑马程序员之C# 学习笔记:打包的简述
- 黑马程序员-------C#学习笔记之二
- 黑马程序员之C#学习笔记:arraylist
- 黑马程序员之C#编程基础学习笔记:让用户输入两个数,打印出两个数的和。
- 黑马程序员之C#编程基础学习笔记:让用户输入一个半径,打印出圆的面积。
- 黑马程序员之C#学习笔记:用户实例连接非内嵌式数据库
- 黑马程序员之C#学习笔记:用户输入一个年份将其全部转化成大写
- 黑马程序员之c#学习笔记:C#学习小总结
- 黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出。
- .黑马程序员之C#编程基础学习笔记:不断要求用户输入一个数字,当用户输入end的时候显示刚才输入的数字中的最大值。
- 黑马程序员之 ASP.NET学习笔记:JS验证大全
- 黑马程序员---struts2学习笔记之七(表单验证)
- 黑马程序员之C#学习笔记:关于C#构造函数
- 黑马程序员C#学习笔记
- 黑马程序员之C#学习笔记: Lambda表达式学习总结
- 黑马程序员之c#学习笔记:C#中的方法的种类以及区别
- 黑马程序员之C#学习笔记:C#读取txt文件的方法
- 黑马程序员之c#学习笔记:按照“2012年12月21日”的格式重新输出
- Emacs 24.2 win8 x64 英文版下打开文件乱码解决
- JavaScript概念总结:作用域、闭包、对象与原型链
- main2-3-2.c 单循环链表
- 无线通信技术
- 黑马程序员之c#学习笔记:用户登录验证码的设计
- Project Euler problem 16
- org.json
- ABAP编程需要注意的小问题
- CONVERSION_EXIT_ALPHA_INPUT和CONVERSION_EXIT_ALPHA_OUTPUT 函数说明
- 浅谈计算机中编码方式
- Linux中Samba详细安装
- CentOS minimal 安装笔记
- iPhone 文件结构和文件操作