vcodeimagepage.cs

来自「C#编写的在线用户统计、在线编辑器、验证码图片」· CS 代码 · 共 182 行

CS
182
字号
/*
 * VCodeImagePage.cs @Microsoft Visual Studio 2008 <.NET Framework 2.0 (or Higher)>
 * AfritXia
 * 2008/5/22
 *
 * Copyright(c) http://www.AfritXia.NET/
 *
 */

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web.UI;

namespace Net.AfritXia.Web.UI
{
    /// <summary>
    /// 验证码图片页面
    /// </summary>
    public class VCodeImagePage : Page
    {
		// 随机对象
		private static readonly Random g_random = new Random();

		/// <summary>
		/// 页面加载事件函数
		/// </summary>
		/// <param name="e"></param>
		protected override void OnPreLoad(EventArgs e)
		{
			base.OnPreLoad(e);

			// 获取随机字符串
			string vcStr = this.NextString(this.MinChars, this.MaxChars);

			// 创建验证码图片生成器
			VCodeImageCreator vcImgCreator = new VCodeImageCreator();

			// 设置字符尺寸
			vcImgCreator.CharMinSize = this.CharMinSize;
			vcImgCreator.CharMaxSize = this.CharMaxSize;

			// 创建验证码图片
			Image vcImg = vcImgCreator.CreateImage(this.ImageWidth, this.ImageHeight, vcStr);

			// 保存验证码
			this.SaveValidationCode(vcStr);
			// 保存验证码图片
			vcImg.Save(Response.OutputStream, ImageFormat.Gif);
		}

		/// <summary>
		/// 保存验证码
		/// </summary>
		/// <param name="validationCode"></param>
		protected virtual void SaveValidationCode(string validationCode)
		{
		}

		/// <summary>
		/// 获取图片宽度
		/// </summary>
		public virtual int ImageWidth
		{
			get
			{
				if (Request.QueryString["ImgWidth"] == null)
					return 180;

				return Convert.ToInt32(Request.QueryString["ImgWidth"]);
			}
		}

		/// <summary>
		/// 获取图片高度
		/// </summary>
		public virtual int ImageHeight
		{
			get
			{
				if (Request.QueryString["ImgHeight"] == null)
					return 60;

				return Convert.ToInt32(Request.QueryString["ImgHeight"]);
			}
		}

		/// <summary>
		/// 获取最少字符个数
		/// </summary>
		public virtual int MinChars
		{
			get
			{
				if (Request.QueryString["MinChars"] == null)
					return 5;

				return Convert.ToInt32(Request.QueryString["MinChars"]);
			}
		}

		/// <summary>
		/// 获取最多字符个数
		/// </summary>
		public virtual int MaxChars
		{
			get
			{
				if (Request.QueryString["MaxChars"] == null)
					return 7;

				return Convert.ToInt32(Request.QueryString["MaxChars"]);
			}
		}

		/// <summary>
		/// 获取最小字符尺寸
		/// </summary>
		public virtual int CharMinSize
		{
			get
			{
				if (Request.QueryString["CharMinSize"] == null)
					return 18;

				return Convert.ToInt32(Request.QueryString["CharMinSize"]);
			}
		}

		/// <summary>
		/// 获取最大字符尺寸
		/// </summary>
		public virtual int CharMaxSize
		{
			get
			{
				if (Request.QueryString["CharMaxSize"] == null)
					return 32;

				return Convert.ToInt32(Request.QueryString["CharMaxSize"]);
			}
		}

		/// <summary>
		/// 随机生成字符串
		/// </summary>
		/// <param name="minChars"></param>
		/// <param name="maxChars"></param>
		/// <returns></returns>
		public string NextString(int minChars, int maxChars)
		{
			string value = "";

			// 随机产生字符串长度
			int strLen = g_random.Next(minChars, maxChars);
			// 计数器
			int count = 0;

			while (count < strLen)
			{
				// 产生随机字符 0..9, a..z, A..Z
				int n = g_random.Next(48, 121);

				// 如果不是数字或者字母, 则跳过
				if ((n >= 58 && n <= 64) || (n >= 91 && n <= 96))
					continue;

				// 不为 I, o, O
				if (n == '0' || n == '1' || 
					n == 'o' || n == 'O' || n == 'r')
					continue;

				value += Convert.ToChar(n);

				count++;
			}

			return value;
		}
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?