今天写的一个 验证码生成 类
来源:互联网 发布:linux chown 递归修改 编辑:程序博客网 时间:2024/06/11 23:21
花了几节上机课写的 调用该类的 列子及源码 在我的资源里面 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[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.Capital: tmpchar = new char[26]; for (int i = 65; i <= 90; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.Lower: tmpchar = new char[26]; for (int i = 97; i <= 122; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.Letter: tmpchar = new char[52]; for (int i = 65; i <= 90; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } for (int i = 97; i <= 122; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.NumeralAndCapital: tmpchar = new char[36]; for (int i = 48; i <= 57; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } for (int i = 65; i <= 90; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.NumeralAndLower: tmpchar = new char[36]; for (int i = 48; i <= 57; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } for (int i = 97; i <= 122; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; case CodeType.NumeralAndLetter: tmpchar = new char[62]; for (int i = 48; i <= 57; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } for (int i = 65; i <= 90; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } for (int i = 97; i <= 122; i++) { tmpchar[n] = char.Parse(char.ConvertFromUtf32(i)); n++; } break; default: tmpchar = new char[0]; break; } return tmpchar; } } }
- 今天写的一个 验证码生成 类
- PHP写一个生成验证码的类
- 用javase写一个类实现自动生成验证码的功能,验证码随机自动生成;
- 今天写的一个.net生成Html分页的代码
- 今天写了一个生成静态页面的小代码
- 一个好的验证码生成类
- 一个python的验证码生成类
- 用javase写一个简单的生成验证码图片的程序(verification code)
- 一个验证码图片生成(刚写的,拿出来分享)
- 闲来无事---写了一个生成验证码的代码
- javase写一个随机生成验证码,有大写,小写,数字组成的
- 写一个验证码
- 写一个自己的验证码工具类
- c#写的一个验证码代码
- 【36】一个canvas写的验证码
- 生成一个验证码
- 生成一个验证码
- 用java代码 生成验证码的一个示例类
- 4.2 用 FSI 编写和测试代码
- 做领导不容易
- 大型Java Web系统选型问题探讨
- 进程同步及异步的概念
- 2011 4-6 fatal error LNK1169: one or more multiply defined symbols found
- 今天写的一个 验证码生成 类
- struts2之整合sitemesh(sitemesh配置)
- Mysql查看监听端口状态
- char[] CString 乱码
- WPF datagrid 弹出右键菜单时先选中该项
- spring定时任务相关配置[转]
- CheckBoxList 控件ListItem项 添加ToolTip属性(鼠标放在上面时,有提示)
- 实现win7触控
- Xcelsius 2008、SAP BW、live office开发总结