84 lines
2.7 KiB
C#
84 lines
2.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.SessionState;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
|
|
|
|
namespace Mtxfw.VipSite
|
|
{
|
|
/// <summary>
|
|
/// 验证码 by Telesa 2011.04.07
|
|
/// </summary>
|
|
public class CheckCode : IHttpHandler, IRequiresSessionState
|
|
{
|
|
public void ProcessRequest(HttpContext context)
|
|
{
|
|
string strNum = RandNum(4);
|
|
context.Session["GLRandNum"] = strNum;
|
|
ValidateCode(strNum, 60, 25, "Arial", 12, "#FFFFFF");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成指定位数的随机数
|
|
/// </summary>
|
|
/// <param name="VcodeNum">参数是随机数的位数</param>
|
|
/// <returns>返回一个随机数字符串</returns>
|
|
public string RandNum(int VcodeNum)
|
|
{
|
|
Random random = new Random();
|
|
if (VcodeNum == 6)
|
|
{
|
|
return (random.Next(100000, 999999).ToString());
|
|
}
|
|
else
|
|
{
|
|
return (random.Next(1000, 9999).ToString());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 生成图片并写入字符
|
|
/// </summary>
|
|
/// <param name="VNum">目标字符</param>
|
|
/// <param name="w">宽</param>
|
|
/// <param name="h">高</param>
|
|
/// <param name="font">字体文件</param>
|
|
/// <param name="fontSize">字体大小</param>
|
|
/// <param name="bgColor">图片背景颜色</param>
|
|
private void ValidateCode(string VNum, int w, int h, string font, int fontSize, string bgColor)
|
|
{
|
|
//生成图像的实例
|
|
Bitmap Img = new Bitmap(w, h);
|
|
//从Img对象生成新的Graphics对象
|
|
Graphics g = Graphics.FromImage(Img);
|
|
//背景颜色
|
|
g.Clear(ColorTranslator.FromHtml(bgColor));
|
|
//生成Font类的实例
|
|
Font f = new Font(font, fontSize, FontStyle.Italic|FontStyle.Bold);
|
|
|
|
//生成笔刷类的实例
|
|
SolidBrush s = new SolidBrush(Color.Red);
|
|
//将VNum写入图片中
|
|
g.DrawString(VNum, f, s, 3, 3);
|
|
//将此图像以Jpeg图像文件的格式保存到流中
|
|
Img.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Jpeg);
|
|
System.Web.HttpContext.Current.Response.ContentType = "image/Jpeg";
|
|
|
|
g.Dispose();
|
|
Img.Dispose();
|
|
System.Web.HttpContext.Current.Response.End();
|
|
}
|
|
|
|
public bool IsReusable
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|