验证码源码:C#实现返回验证码图片的类库源码来源: 发布时间:星期三, 2008年9月10日 浏览:194次 评论:0
验证码字符个数、生成图片宽度、高度自定均可由构造方法自定,无参构造生成默认字符个数和默认大小的Image,方法 GetImgWithValidateCode()返回生成的验证码图片,方法 IsRight(string inputValCode) 判断用户输入的验证码 inputValCode与
图片显示的字符是否一致,不区分大小写 using System; using System.IO; using System.Data; using System.Configuration; using System.Collections; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; namespace DrawValidateImageLib { public class DrawValImg { /// <summary> /// 无参构造 /// </summary> public DrawValImg() { } /// <summary> /// 带有生成字符个数的构造 /// </summary> /// <param name="charNum">验证码中包含随机字符的个数</param> public DrawValImg(int charNum) { this.CharNum = charNum; } /// <summary> /// 带有验证码图片宽度和高度的构造 /// </summary> /// <param name="width">验证码图片宽度</param> /// <param name="height">验证码图片高度</param> public DrawValImg(int width,int height) { this.width = width; this.height = height; } /// <summary> /// 带有生成字符个数,验证码图片宽度和高度的构造 /// </summary> /// <param name="charNum">验证码中包含随机字符的个数</param> /// <param name="width">验证码图片宽度</param> /// <param name="height">验证码图片高度</param> public DrawValImg(int charNum,int width,int height) { this.CharNum = charNum; this.width = width; this.height = height; } /// <summary> /// 验证码中字符个数 /// </summary> int charNum = 5; //默认字符个数为5 public int CharNum { get { return charNum; } set { charNum = value; } } /// <summary> /// 字号 /// </summary> int fontSize = 20; public int FontSize { get { return fontSize; } } /// <summary> /// 图片宽度 /// </summary> int width=200; public int Width { get { return width; } } /// <summary> /// 图片高度 /// </summary> int height=45; public int Height { get { return height; } set { height = value; } } /// <summary> /// 随机生成的字符串 /// </summary> string validStr=""; public string ValidStr { get { return validStr; } set { validStr = value; } } /// <summary> /// 产生指定个数的随机字符串,默认字符个数为5 /// </summary> void GetValidateCode() { Random rd = new Random(); //创建随机数对象 //产生由 charNum 个字母或数字组成的一个字符串 string str = "abcdefghijkmnpqrstuvwyzABCDEFGHJKLMNPQRSTUVWYZ23456789田国兴";//共57个字符,除 l,o,x,I,O,X,1,0 的所有数字和大写字母 for (int i = 0; i < charNum; i++) { validStr = validStr + str.Substring(rd.Next(57), 1);//返回0到56共57个 } } /// <summary> /// 由随机字符串,随即颜色背景,和随机线条产生的Image /// </summary> /// <returns>Image</returns> public Image GetImgWithValidateCode()//返回 Image { //产生随机字符串 GetValidateCode(); //声明一个位图对象 Bitmap bitMap = null; //声明一个绘图画面 Graphics gph = null; //创建内存流 MemoryStream memStream = new MemoryStream(); Random random = new Random(); //由给定的需要生成字符串中字符个数 CharNum, 图片宽度 Width 和高度 Height 确定字号 FontSize, //确保不因字号过大而不能全部显示在图片上 int fontWidth=(int)Math.Round(width/(charNum+2)/1.3); int fontHeight=(int)Math.Round(height/1.5); //字号取二者中小者,以确保所有字符能够显示,并且字符的下半部分也能显示 fontSize = fontWidth <= fontHeight ? fontWidth : fontHeight; //创建位图对象 bitMap = new Bitmap(width+FontSize,height); //根据上面创建的位图对象创建绘图图面 gph = Graphics.FromImage(bitMap); //设定验证码图片背景色 gph.Clear(GetControllableColor(200)); //产生随机干扰线条 for (int i = 0; i < 10; i++) { Pen backPen = new Pen(GetControllableColor(100), 2); //线条起点 int x = random.Next(width); int y = random.Next(height); //线条终点 int x2 = random.Next(width); int y2 = random.Next(height); //划线 gph.DrawLine(backPen, x, y, x2, y2); } //定义一个含10种字体的数组 String[] fontFamily ={ "Arial", "Verdana", "Comic Sans MS", "Impact", "Haettenschweiler", "Lucida Sans Unicode", "Garamond", "Courier New", "Book Antiqua", "Arial Narrow" }; 0
相关文章
读者评论
发表评论 |