实现原理:
通过随机函数产生验证码元素,将数值型的验证码元素转换成字符型然后再连成字符串,将验证码字符串写入Cookie以供验证时调用。
通过后台动态绘制位图的方法,绘制一个指定大小的位图,然后在空白位图画出底纹、验证码字体、和边框。

实现代码
(1)Login.aspx(登录页前台)
>

(2)Login.aspx.cs(登录页后台)
[转] ASP.NET1.1(C#)中验证码产生的原理及应用using System;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Collections;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.ComponentModel;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Data;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Drawing;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.SessionState;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI.WebControls;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI.HtmlControls;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
namespace Validator

(3) CheckCode.aspx(验证页前台)

(4)CheckCode.aspx.cs(验证页后台)
[转] ASP.NET1.1(C#)中验证码产生的原理及应用using System;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Collections;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.ComponentModel;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Data;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Drawing;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.SessionState;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI.WebControls;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
using System.Web.UI.HtmlControls;
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
[转] ASP.NET1.1(C#)中验证码产生的原理及应用
namespace Validator


主要函数分析:
1、通过随机函数(Random)先产生验证码组成元素(这里为五位) 并将其转换为字符串(属性为只读),完成后写入“Cookie”中去以供验证时调用。
2、将验证码字符串写入图形:
(1)建立一个位图文件确定长和宽:
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
(a)System.Drawing. [C#] Bitmap(int width,int height);
(b)double Math.Ceiling (double a):返回大于或等于指定数字的最小整数。
(2)画图片的背景噪音点(60个):
for(int i=0; i<60; i++)  {
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
(a) public virtual int Next(int maxValue);返回一个小于所指定最大值的非负随机数。 参数:maxValue-要生成的随机数的上限。maxValue 必须大于或等于零。
(b) image.SetPixel(int x,int y,Color color); 参数: x-要设置的像素的 x 坐标;y-要设置的像素的 y 坐标;color-Color 结构,它表示要分配给指定像素的颜色。
(c) Color.FromArgb(int argb) 参数:argb-指定 32 位 ARGB 值的值。
(3)把产生的随机数以字体的形式写入位图:Graphics.DrawString(string s,Font font,Brush brush,float x,float y);
参数:s-要绘制的字符串;font-Font 对象,它定义字符串的文本格式;
brush-Brush 对象,它确定所绘制文本的颜色和纹理;
x-所绘制文本的左上角的 x 坐标;
y-所绘制文本的左上角的 y 坐标。(在指定位置并且用指定的 Brush 和 Font 对象绘制指定的文本字符串)
(4) 画图片的边框线: public void DrawRectangle(Pen pen, int x, int y, int width, int height);绘制由坐标对、宽度和高度指定的矩形。
参数:pen-Pen 对象,它确定矩形的颜色、宽度和样式;
x-要绘制的矩形的左上角的 x 坐标;
y-要绘制的矩形的左上角的 y 坐标;
width-要绘制的矩形的宽度;height-要绘制的矩形的高度。
(5) 将图片以二进制流的方式输出加上格式并可显示出来。

相关文章: