首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么制作验证码

2012-02-11 
如何制作验证码?就是那种字母数字印在图片上的那种?[解决办法] private string GetCode(int num){string[]

如何制作验证码?
就是那种字母数字印在图片上的那种?

[解决办法]
private string GetCode(int num) 

string[] source ={ "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}; 
string code = ""; 
Random rd = new Random(); 
for (int i = 0; i < num; i++) 

code += source[rd.Next(0, source.Length)]; 

return code; 

private MemoryStream GetVImageStream() 

MemoryStream ImageMemoryStream = new MemoryStream(); 
string VCodeString = GetCode(4); 
Session["HCValidateCode"] = VCodeString; 
Font VCodeFont = new Font("Arial", 14, FontStyle.Bold); 
SolidBrush VCodeBrush = new SolidBrush(Color.SandyBrown); 
Pen LinePen = new Pen(Color.Ivory, 1); 
Bitmap Tmap = new Bitmap(VCodeString.Length * 19, 24); 
Graphics TGrphics; 
TGrphics = Graphics.FromImage(Tmap); 
TGrphics.Clear(BackGroundColor(0, 255)); 
//产生干扰线 
for (int i = 1; i <= 6; i++) 

int TmpPosition = i * 4; 
Color LineColor = BackGroundColor(0, 255); 
LinePen.Color = LineColor; 
TGrphics.DrawLine(LinePen, 0, TmpPosition, VCodeString.Length * 19, 0); 
LineColor = BackGroundColor(0, 255); 
LinePen.Color = LineColor; 
TGrphics.DrawLine(LinePen, 0, 24, VCodeString.Length * 19, TmpPosition); 

//产生干扰线 
TGrphics.DrawString(VCodeString, VCodeFont, VCodeBrush, VCodeString.Length, 1); 
Tmap.Save(ImageMemoryStream, System.Drawing.Imaging.ImageFormat.Png); 
Tmap.Dispose(); 
TGrphics.Dispose(); 
return ImageMemoryStream; 


#region 随机返回背景色 
/// <summary> 
/// 随机返回颜色 
/// </summary> 
/// <param name="BeginRandomNumber">指定颜色开始的最小值 </param> 
/// <param name="RandomNumber">指定颜色值波动的范围 </param> 
/// <returns>随机的Color </returns> 
private Color BackGroundColor( int BeginRandomNumber , int RandomNumber ) 

int ColorR = 0 ; 
int ColorG = 0 ; 
int ColorB = 0 ; 
Random TRandom = new Random() ; 
ColorR = BeginRandomNumber + TRandom.Next( RandomNumber ) ; 
ColorG = BeginRandomNumber + TRandom.Next( RandomNumber ) ; 
ColorB = BeginRandomNumber + TRandom.Next( RandomNumber ) ; 
Color ColorBG = Color.FromArgb( ColorR , ColorG , ColorB ) ; 
return ColorBG ; 

#endregion 


Response.ClearContent(); 


Response.ContentType = "images/Png"; 
Response.BinaryWrite(GetVImageStream().ToArray());
[解决办法]
using System; 
using System.IO; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Text; 
using System.Collections; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
/**//// <summary> 
/// 
/// ** asp.net(C#) 生成验证码 ** 
/// 
/// File: GenerateCheckCode.aspx.cs 
/// 
/// Author: 周振兴 (Zxjay 飘遥) 
/// 
/// E-Mail: tda7264@163.com 
/// 
/// Date: 07-04-10 
/// 
/// </summary> 
public partial class GenerateCheckCode : System.Web.UI.Page 
...{ 
protected void Page_Load(object sender, EventArgs e) 
...{ 
string chkCode = string.Empty; 
//颜色列表,用于验证码、噪线、噪点 
Color[] color =...{ Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue }; 
//字体列表,用于验证码 
string[] font =...{ "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" }; 
//验证码的字符集,去掉了一些容易混淆的字符 
char[] character =...{ '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' }; 
Random rnd = new Random(); 
//生成验证码字符串 
for (int i = 0; i < 4; i++) 
...{ 
chkCode += character[rnd.Next(character.Length)]; 

Bitmap bmp = new Bitmap(100, 40); 
Graphics g = Graphics.FromImage(bmp); 
g.Clear(Color.White); 
//画噪线 
for (int i = 0; i < 10; i++) 
...{ 
int x1 = rnd.Next(100); 
int y1 = rnd.Next(40); 
int x2 = rnd.Next(100); 
int y2 = rnd.Next(40); 
Color clr = color[rnd.Next(color.Length)]; 
g.DrawLine(new Pen(clr), x1, y1, x2, y2); 

//画验证码字符串 
for (int i = 0; i < chkCode.Length; i++) 
...{ 
string fnt = font[rnd.Next(font.Length)]; 
Font ft = new Font(fnt, 18); 
Color clr = color[rnd.Next(color.Length)]; 
g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 20 + 8, (float)8); 

//画噪点 
for (int i = 0; i < 100; i++) 
...{ 
int x = rnd.Next(bmp.Width); 
int y = rnd.Next(bmp.Height); 
Color clr = color[rnd.Next(color.Length)]; 
bmp.SetPixel(x, y, clr); 

//清除该页输出缓存,设置该页无缓存 
Response.Buffer = true; 
Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0); 
Response.Expires = 0; 
Response.CacheControl = "no-cache"; 
Response.AppendHeader("Pragma", "No-Cache"); 
//将验证码图片写入内存流,并将其以 "image/Png" 格式输出 
MemoryStream ms = new MemoryStream(); 
try 
...{ 
bmp.Save(ms, ImageFormat.Png); 
Response.ClearContent(); 
Response.ContentType = "image/Png"; 
Response.BinaryWrite(ms.ToArray()); 

finally 
...{ 
//显式释放资源 
bmp.Dispose(); 
g.Dispose(); 






使用方法如下: 
新建名为 GenerateCheckCode.aspx 的文件,将上述代码拷贝到代码文件 GenerateCheckCode.aspx.cs 
在需要验证码的地方放置语句 <asp:Image ID="img1" runat="server" ImageUrl="~/GenerateCheckCode.aspx" /> 即可。


[解决办法]
http://web.tiens.com/temp/verify.rar 
给你做好了,现成的
用时用<img src=verify.aspx>就可以了

热点排行