第一部分,获取随机字符串
string GetRandomString(int length)
{
string str = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,O,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9";
//将字符串拆分成字符串数组,每个字母、数字都是数组中的一个元素
string[] words = str.Split(',');
//声明验证码变量
string validationNumber = "";
//实例化随机数对象
Random rand = new Random();
for (int i = 0; i < length; i++)
{
//成生随机数,作为获取数组元素的索引
int index = rand.Next(0, words.Length);
//拼接随机生成的字母或数字
validationNumber += words[index];
}
return validationNumber;
}
第二部分,生成图片
/// <summary>
/// 生成验证码图片
/// </summary>
/// <param name="validateNum">验证码</param>
void GetValidationNumber(string validateNum)
{
//实例化位图
Bitmap image = new Bitmap(18 * validateNum.Length, 24);
//绘图
Graphics g = Graphics.FromImage(image);
//清空画布
g.Clear(Color.White);
//实例化字体
Font font = new Font("微软雅黑", 14, FontStyle.Bold);
//实例化颜色和纹理
Brush brush = Brushes.Blue;
//绘制字符串(0,0)表示图片最左边的位置
g.DrawString(validateNum, font, brush, 0, 0);
//绘制边框
Pen pen = new Pen(Color.Red, 2);
g.DrawRectangle(pen, 0, 0, image.Width - 1, image.Height - 1);
Random rand = new Random();
//绘制干扰线
for (int i = 0; i < 20; i++)
{
Pen p = new Pen(Color.FromArgb(rand.Next()), 2);
int x1 = rand.Next(image.Width);
int y1 = rand.Next(image.Height);
int x2 = rand.Next(image.Width);
int y2 = rand.Next(image.Height);
g.DrawLine(p, x1, y1, x2, y2);
}
//绘制干扰点
for (int i = 0; i < 100; i++)
{
int x1 = rand.Next(image.Width);
int y1 = rand.Next(image.Height);
image.SetPixel(x1, y1, Color.FromArgb(rand.Next()));
}
//内存流,将数据存放在内存中
MemoryStream ms = new MemoryStream();
//将绘制好的图片,存放到内存流中
image.Save(ms, ImageFormat.Gif);
//清空缓冲区
Response.ClearContent();
Response.ContentType = "image/Gif";
//写入二进制流到缓冲区
Response.BinaryWrite(ms.ToArray());
}
第三部分,调用方法
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string randstr = GetRandomString(4);
Session["validateNum"] = randstr;
GetValidationNumber(randstr);
}
}
完成后本网页将单独成为一个图片
可通过ImageUrl添加到ImageButton控件中
在判断验证码时需要转为string类型:
Session["validateNum"].ToString()