您的位置:首页 > 其它

今天写的一个 验证码生成 类

2011-04-06 16:38 253 查看
花了几节上机课写的

调用该类的 列子及源码 在我的资源里面

using System;

using System.Drawing;

namespace VerifyCode

{

class VerifyCode

{

/// <summary>

/// 生成的验证码(如果不区分大小写的话请自行在外部转换大小写字母)

/// </summary>

public string VerifyCodeString;

/// <summary>

/// 生成的验证码图像

/// </summary>

public Bitmap VerifyCodeImage;

/// <summary>

/// 生成验证码

/// </summary>

/// <param name="codelengt">验证码的长度</param>

/// <param name="fontsize">验证码的大小</param>

public void RandomVerifyCode(int codelengt, int fontsize,CodeType codetype)

{

Random r = new Random();

Font CodeFont = new Font("微软雅黑", (float)fontsize, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));

Bitmap tmp = new Bitmap(codelengt * (fontsize + 4) + 10, fontsize + 25);

Graphics g = Graphics.FromImage(tmp);

char[] charcode = CodeChar(codetype);

g.Clear(Color.White);

g.DrawImage(creatrBackImage(tmp.Width,tmp.Height,codelengt*20), 0, 0);

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

SolidBrush b = new SolidBrush(Color.Black);

for (int i = 0; i < codelengt; i++)

{

string rtmp =charcode [ r.Next(charcode.Length )].ToString();

VerifyCodeString += rtmp;

b.Color = ranColor();

g.DrawString(rtmp, CodeFont, b, 0 + i * (fontsize + 2) + r.Next(10), 0 + r.Next(5));

}

g.Dispose();

VerifyCodeImage = tmp;

}

/// <summary>

/// 生成随机颜色

/// </summary>

/// <returns>生成的随机颜色</returns>

private Color ranColor()

{

int[] rgb = new int[3];

Random rd = new Random();

for (int i = 0; i < 3; i++)

{

rgb[i] = rd.Next(256);

}

System.Threading.Thread.Sleep(10);

return Color.FromArgb(rgb[0], rgb[1], rgb[2]);

}

/// <summary>

/// 创建背景图案

/// </summary>

/// <param name="w">长度</param>

/// <param name="h">高度</param>

///<param name="count">线条的数量</param>

/// <returns>创建好的图案</returns>

private Bitmap creatrBackImage(int w, int h,int count)

{

Bitmap tmpimage = new Bitmap(w, h);

Graphics g = Graphics.FromImage(tmpimage);

Pen line = new Pen(Color.FromArgb(133, 133, 133));

Point p = new Point();

Random rd = new Random();

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

for (int i = 0; i < count ; i++)

{

p = new Point(rd.Next(w), rd.Next(h));

g.DrawLine(line, p, new Point(p.X + rd.Next(11), p.Y - 5 + rd.Next(11)));

}

line.Dispose();

g.Dispose();

return tmpimage;

}

/// <summary>

/// 验证码类型

/// </summary>

public enum CodeType

{

/// <summary>

/// 数字

/// </summary>

Numeral = 1,

/// <summary>

/// 大写字母

/// </summary>

Capital = 2,

/// <summary>

/// 小写字母

/// </summary>

Lower = 3,

/// <summary>

/// 大小写字母

/// </summary>

Letter = 4,

/// <summary>

/// 数字和大写字母

/// </summary>

NumeralAndCapital = 5,

/// <summary>

/// 数字和小写字母

/// </summary>

NumeralAndLower = 6,

/// <summary>

/// 数字和大小写字母

/// </summary>

NumeralAndLetter = 7

}

/// <summary>

/// 生成验证码候选的数组

/// </summary>

/// <param name="codetype">验证码类型</param>

/// <returns>验证码候选数组</returns>

private char[] CodeChar(CodeType codetype)

{

char[] tmpchar;

int n = 0;

switch (codetype)

{

case CodeType.Numeral:

tmpchar = new char[10];

for (int i = 48; i <= 57; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.Capital:

tmpchar = new char[26];

for (int i = 65; i <= 90; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.Lower:

tmpchar = new char[26];

for (int i = 97; i <= 122; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.Letter:

tmpchar = new char[52];

for (int i = 65; i <= 90; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

for (int i = 97; i <= 122; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.NumeralAndCapital:

tmpchar = new char[36];

for (int i = 48; i <= 57; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

for (int i = 65; i <= 90; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.NumeralAndLower:

tmpchar = new char[36];

for (int i = 48; i <= 57; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

for (int i = 97; i <= 122; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

case CodeType.NumeralAndLetter:

tmpchar = new char[62];

for (int i = 48; i <= 57; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

for (int i = 65; i <= 90; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

for (int i = 97; i <= 122; i++)

{

tmpchar
= char.Parse(char.ConvertFromUtf32(i));

n++;

}

break;

default:

tmpchar = new char[0];

break;

}

return tmpchar;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐