using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string s = 随即字符方法(4);
Session["CheckCode"] = s;
CreateImage(s);
}
private string 随即字符方法(int CodeCount)
{
string allCode = "0,1,2,3,4,5,6,7,8,9,q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b,n,m,Q,W,E,R,T,Y,U,I,O,P,A,S,D,F,G,H,J,K,L,Z,X,C,V,B,N,M";
//设置随即数的字符内容范围
string[] allCodeArray = allCode.Split(',');
//将字符串
Random ran=new Random();
//定义一个随机类
string randomStr = null;
//for (int i=0;i<)
for (int i = 0; i < CodeCount; i++)//生产几个随即数
{
int t = ran.Next(61);//产生0-61之间的随即数用变量t来接收这个产生的随即数
randomStr += allCodeArray[t].ToString();//将随机产生的字符累加起来
}
return randomStr;
}
private void CreateImage(string checkCode)//将生成的验证码转化为图片的方法,参数是随机生成的验证码
{
int iwidth = (int)checkCode.Length * 15;
//定义一个锁生成图片的大概的宽度,以每个字母大概15像素来计算
Bitmap image = new Bitmap(iwidth, 30);//实例化一个位图的对象,宽是iwidth,高是30像素
Graphics g = Graphics.FromImage(image);
//实例化一个画布对象g,该画布的区域就是image的区域,就是说只在宽iwidth,高20的地方画验证码的图片
Font f = new Font("Arial", 15, FontStyle.Bold);//定义一个验证码的字体
SolidBrush b=new SolidBrush(Color.White);//初始化一个画刷
g.Clear(Color.Red);//将背景颜色设置为红色
g.DrawString(checkCode, f, b, 3, 3);//使用DrawString方法把字符串checkCode画在画布个g上
Pen bp = new Pen(Color.Blue, 0);//定义一个bp用来画 验证码的干扰线
Random r1 = new Random();
int t = r1.Next(1, 4);
for (int i = 0; i < t; i++)
{
int y = r1.Next(image.Height);
//随机产生一个线的高度,该线的高度不能超出图片的高度
g.DrawLine(bp, 0, y, image.Width, y);//从左到右将线画在高度为y的直线上
}
MemoryStream ms = new MemoryStream();//在网页程序中要想使用GDI+画图必须使用流
image.Save(ms, ImageFormat.Jpeg);//将画好的位图image保存的格式是Jpeg
Response.ClearContent();//指定内存的缓冲区
Response.ContentType = "image/Jpeg";//指定本页面生成验证码的图片是Jpeg格式
Response.BinaryWrite(ms.ToArray());
//使用内存流保存图片完毕后销毁内存流(将内存流写成二进制)
g.Dispose();
image.Dispose();//销毁对象节约资源
}
}
使用的页面
使用的页面
<div class="text">注册验证</div>
<table class="style1">
<tr style="line-height:20px;">
<td style="text-align: right; width:150px;">
验证码:</td>
<td style="width:70px;">
<asp:TextBox ID="Txt_Code" runat="server" Width="60px"></asp:TextBox>
</td>
<td style="width: 30px; height: 20px">
<img runat="server" id= "Image1" alt="验证码" style="height:20px; width:35px;"/>
</td>
<td>
<input type="button" οnclick= "document.getElementById( 'Image1').src+= '? '; " value= "换一个"/>
</td>
</tr>
</table>