|
自己写的一个图形验证码页面(Asp.Net2.0通过)(1) 项目需要,要在首页登录界面添加一个图形验证码,赶时髦吧,网上一搜,特别多,找了几个,都不太满意。主要问题是大部分代码生成的图片宽度不唯一,页面布局不容易控制,其次是颜色单一,有些又过于抽象,不仔细看很容易弄错。针对特定的客户,我只需要“图片”长宽固定,颜色多样的数字图形验证码,借鉴网上的现有代码,自己操刀完成,以下是效果图:
原理不复杂,就是把网页当画布,运用各色画笔,在特定区域内画出数字,然后以特定格式(本例为PNG格式)发回客户端,在IE中显示为"图片",用于验证的字符串存于Session中。
主要代码如下: // 生成随机数字字符串 public string GetRandomNumberString(int int_NumberLength) { string str_Number = string.Empty; Random theRandomNumber = new Random();
for (int int_index = 0; int_index < int_NumberLength; int_index++) str_Number += theRandomNumber.Next(10).ToString();
return str_Number; } 生成随机颜色 public Color GetRandomColor() { Random RandomNum_First = new Random((int)DateTime.Now.Ticks); // 对于C#的随机数,没什么好说的 System.Threading.Thread.Sleep(RandomNum_First.Next(50)); Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
// 为了在白色背景上显示,尽量生成深色 int int_Red = RandomNum_First.Next(256); int int_Green = RandomNum_Sencond.Next(256); int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green; int_Blue = (int_Blue > 255) ? 255 : int_Blue;
return Color.FromArgb(int_Red, int_Green, int_Blue); } 根据验证字符串生成最终图象 public void CreateImage(string str_ValidateCode) { int int_ImageWidth = str_ValidateCode.Length * 13; Random newRandom = new Random(); // 图高20px Bitmap theBitmap = new Bitmap(int_ImageWidth, 20); GraphiCS theGraphics = Graphics.FromImage(theBitmap);
|