使用效果:
在App_Code下有2个类,一个是Rand.cs,另外一个是Verify.cs.
Rand.cs用于生成随机数,代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class Rand
{
/// <summary>
/// 生成随机数字
/// </summary>
/// <param name="length">生成长度</param>
/// <returns></returns>
public static string Number(int Length)
{
return Number(Length, false);
}
/// <summary>
/// 生成随机数字
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Number(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(2);
string result = "";
System.Random random = new Random();
for (int i = 0; i < Length; i++)
{
result += random.Next(10).ToString();
}
return result;
}
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="IntStr">生成长度</param>
/// <returns></returns>
public static string Str(int Length)
{
return Str(Length, false);
}
/// <summary>
/// 生成随机字母与数字
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Str(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(2);
char[] Pattern = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '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 result = "";
int n = Pattern.Length;
System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
for (int i = 0; i < Length; i++)
{
int rnd = random.Next(0, n);
result += Pattern[rnd];
}
return result;
}
/// <summary>
/// 生成随机纯字母随机数
/// </summary>
/// <param name="IntStr">生成长度</param>
/// <returns></returns>
public static string Str_char(int Length)
{
return Str_char(Length, false);
}
/// <summary>
/// 生成随机纯字母随机数
/// </summary>
/// <param name="Length">生成长度</param>
/// <param name="Sleep">是否要在生成前将当前线程阻止以避免重复</param>
/// <returns></returns>
public static string Str_char(int Length, bool Sleep)
{
if (Sleep)
System.Threading.Thread.Sleep(2);
char[] Pattern = new char[] { '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 result = "";
int n = Pattern.Length;
System.Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
for (int i = 0; i < Length; i++)
{
int rnd = random.Next(0, n);
result += Pattern[rnd];
}
return result;
}
}
Verify.cs用于绘制图片,保存当前的验证码,代码如下:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
/// <summary>
/// Verify 的摘要说明
/// </summary>
public class Verify
{
/// <summary>
/// 随机码认证
/// </summary>
/// <param name="code">生成认证长度</param>
public static void DrawImage(int code)
{
HttpContext.Current.Session["CheckCode"] = Rand.Number(5);
CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
/// <summary>
/// /// 生成验证图片
/// /// </summary>
/// /// <param name="checkCode">验证字符</param>
private static void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 15);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 30);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.LightCyan);
//定义颜色
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
//定义字体
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "Comic Sans MS" };
Random rand = new Random();
//随机输出噪点
for (int i = 0; i < 150; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawPie(new Pen(Color.LightGray, 0), x, y, 6, 6, 1, 1);
}
//输出不同字体和颜色的验证码字符
for (int i = 0; i < checkCode.Length; i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(6);
Font fs_font = new System.Drawing.Font(font[findex], 14, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii = 4;
if ((i + 1) % 2 == 0)
{
ii = 2;
}
g.DrawString(checkCode.Substring(i, 1), fs_font, b, 3 + (i * 12), ii);
}
//画一个边框
g.DrawRectangle(new Pen(Color.Red, 0), 100, 0, image.Width - 1, image.Height - 1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose(); }}
用一张页面来输出认证码,Image.aspx,页面文件不需要写任何代码:
protected void Page_Load(object sender, EventArgs e)
{
Verify.DrawImage(5);
}
实际使用页面代码:
<form id="form1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><script type="text/javascript" language="JavaScript">
var numkey = Math.random();
numkey = Math.round(numkey*10000);
document.write("<img src=\"Image.aspx?k="+ numkey +"\" width=\"70\" onClick=\"this.src+=Math.random()\" alt=\"图片看不清?点击重新得到验证码\" style=\"cursor:pointer;\" height=\"19\" hspace=\"4\"");
</script>
<br />
<asp:Button ID="Button1" runat="server" Text="验证" OnClick="Button1_Click" />
</form>
后台CS代码:
protected void Button1_Click(object sender, EventArgs e)
{
if (TextBox1.Text != Session["CheckCode"].ToString())
{
Response.Write("<font color='red'>输入错误!</font>");
}
else
{
Response.Write("<font color='green'>输入正确!</font>");
}
}
No Data Now...
| ©2003-2012 Woody. Some Rights Reserved. Feed - Sitemap - Valid XHTML - Valid CSS - Creative Commons Powered by Woody. Skin Reserved by Default | Processed in 0.015625 Seconds. 4 Queries | 浙ICP备07029590号 |