using Sy
stem;
using Sy
stem.Collections.Generic;
using Sy
stem.Linq;
using Sy
stem.Web;
using Sy
stem.Web.Mvc;
using Util
ITy;
using Jellal**;
namespace sjlwebsite.Controllers
{
p
ublic class CommonController : Controller
{
#region 验证码
[OutputCache(Duration = 0)]
public ActionResult VCode()
{
string code = ValidateCode.CreateRandomCode(4);
Session["vcode"] = code;
ValidateCode.CreateImage(code);
return View();
}
public string GetCode()
{
return Session["vcode"].Tostr();
}
#endregion
}
}
using Sy
stem;
using Sy
stem.Collections;
using Sy
stem.
componentModel;
using Sy
stem.Data;
using Sy
stem.Drawing;
using Sy
stem.Web;
using Sy
stem.Web.Session
state;
using Sy
stem.Web.UI;
using Sy
stem.Web.UI.WebControls;
using Sy
stem.Web.UI.Ht
MLControls;
n
amespace Utility
{
/// <summary>
/// 完美
随机验证码 0.10
/// Verion:0.10
/// Description:
随机生成设定验证码,并
随机旋转一定角度,
字体颜色不同
/// </summary>
public class ValidateCode
{
/// <summary>
///
生成随机码
/// </summary>
/// <param name="length">
随机码个数www.52mvc
.COM</param>
/// <returns></returns>
public static string CreateRandomCode(int length)
{
int rand;
char code;
string randomcode = String.Empty;
//
生成一定长度的验证码
Sy
stem.Random random = new Random();
for (int i = 0; i < length;
i++)
{
rand = random.Next();
if (rand % 3
== 0)
{
code = (char)('A' + (char)(rand % 26));
}
else
{
code = (char)('0' + (char)(rand % 10));
}
randomcode += code.ToString();
}
return randomcode;
}
/// <summary>
/// 创建
随机码
图片 /// </summary>
/// <param name="randomcode">
随机码</param>
public static void CreateImage(string randomcode)
{
int randAngle = 45; //
随机转动角度
int mapwidth = (int)(randomcode.Length * 23);
Bitmap map = new Bitmap(mapwidth,28);//创建
图片背景
Graphics graph = Graphics.
FromImage(map);
graph.Clear(Color.AliceBlue);//清除画面,填充背景
graph.DrawRectangle(new
PEn(Color.Black,0),map.Width - 1,map.Height - 1);//画
一个边框
//graph.SmoothingMode = Sy
stem.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
Random rand = new Random();
//背景噪点
生成 www.js-code.net
Pen blackPen = new Pen(Color.LightGray,0);
for (int i = 0; i < 50; i++)
{
int x = rand.Next(0,map.Width);
int y = rand.Next(0,map.Height);
graph.DrawRectangle(blackPen,x,y,1,1);
}
//验证码旋转,
防止机器识别
char[] chars = randomcode.
tocharArray();//拆散字符串成单
字符数组 //
文字距中
StringFormat format = new StringFormat(StringFormatFlags.NoClip);
format.Alignment = StringAlignment.
center;
format.LineAlignment = StringAlignment.Center;
//定义颜色
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","
宋体" };
for (int i = 0; i < chars.Length; i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new Sy
stem.Drawing.Font(font[findex],13,Sy
stem.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
Brush b = new Sy
stem.Drawing
.solidBrush(c[cindex]);
Point dot = new Point(16,16);
//graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标
显示间距的
float angle = rand.Next(-randAngle,randAngle);//转动的度数
graph.TranslateTransform(dot.X,dot.Y);//移动
光标到
指定位置 graph.RotateTransform(angle);
graph.DrawString(chars.ToString(),f,b,format);
//graph.DrawString(chars.ToString(),new SolidBrush(Color.Blue),format);
graph.RotateTransform(-angle);//转回去
graph.TranslateTransform(2,-dot.Y);//移动光标到指定位置
}
//graph.DrawString(randomcode,2,2); //标准
随机码
//
生成图片 Sy
stem.IO.MemoryStream ms = new Sy
stem.IO.MemoryStream();
map.Save(ms,Sy
stem.Drawing.Ima
ging.ImageFormat.Gif);
HttpContext.
current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/gif";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
graph.Dispose();
map.Dispose();
}
}
}