今天写的一个 验证码生成 类
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;
}
}
}
调用该类的 列子及源码 在我的资源里面
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;
}
}
}
相关文章推荐
- 今天写了一个生成静态页面的小代码
- 验证码 生成 二三例(一般处理程序,封装一个类)
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码
- 一个简单的基于Servlet的验证码生成程序
- 一个自动生成验证码的代码
- js生成二级城市联动菜单,动态生成年、月、日字段,生产一个验证码
- C#生成一个复杂的验证码、背景随机、字体随机、中英文数字随机
- 一个用于生成验证码的C#类代码
- 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码
- 设计一个函数,根据指定长度生成对应的验证码(由数字和大小写英文字母构成的随机字符串)
- 请问一下在xml注册界面做一个框,并且把代码生成的验证码显示到里面,谢谢了
- 网站登录页面,验证码的一个生成方法
- 一个好的验证码生成类
- 第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
- 写一个含数字,拼音,汉字的验证码生成类
- 请问一下在xml注册界面做一个框,并且把代码生成的验证码显示到里面,谢谢了
- 一个好用的自定义验证码生成函数
- ASP.NET2.0生成验证码(防一个session时间内攻击)
- 生成一个验证码
- 用javase写一个类实现自动生成验证码的功能,验证码随机自动生成;