时间:2016-02-16 02:00 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net 图片验证码的HtmlHelper】,下面是详细的讲解!
asp.net 图片验证码的HtmlHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Drawing.Imaging;
namespace MvcApplication1
{
public class ValidateCode
{
public ValidateCode()
{
}
/// <summary>
/// 验证码的最大长度
/// </summary>
public int MaxLength
{
get { return 10; }
}
/// <summary>
/// 验证码的最小长度
/// </summary>
public int MinLength
{
get { return 1; }
}
/// <summary>
/// 生成验证码
/// </summary>
/// <param name="length">指定验证码的长度</param>
/// <returns></returns>
public string CreateValidateCode(int length)
{
var randMembers=new int[length];
var validateNums=new int[length];
var validateNumberStr="";
//生成起始序列值
var seekSeek=unchecked((int)DateTime.Now.Ticks);
var seekRand=new Random(seekSeek);
var beginSeek=(int)seekRand.Next(0, Int32.MaxValue - length * 10000);
var seeks=new int[length];
for (var i=0; i < length; i++)
{
beginSeek +=10000;
seeks[i]=beginSeek;
}
//生成随机数字
for (var i=0; i < length; i++)
{
var rand=new Random(seeks[i]);
var pownum=1 * (int)Math.Pow(10, length);
randMembers[i]=rand.Next(pownum, Int32.MaxValue);
}
//抽取随机数字
for (var i=0; i < length; i++)
{
var numStr=randMembers[i].ToString();
var numLength=numStr.Length;
var rand=new Random();
var numPosition=rand.Next(0, numLength - 1);
validateNums[i]=Int32.Parse(numStr.Substring(numPosition, 1));
}
//生成验证码
for (var i=0; i < length; i++)
{
validateNumberStr +=validateNums[i].ToString();
}
return validateNumberStr;
}
/// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="validateCode">验证码</param>
public byte[] CreateValidateGraphic(string validateCode)
{
var image=new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
var g=Graphics.FromImage(image);
try
{
//生成随机生成器
var random=new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i=0; i < 25; i++)
{
var x1=random.Next(image.Width);
var x2=random.Next(image.Width);
var y1=random.Next(image.Height);
var y2=random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
//Font font=new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
string[] fontName={ "华文新魏", "宋体", "圆体", "黑体", "隶书" };
var font=new Font(fontName[new Random().Next(0, validateCode.Length)], 12, (FontStyle.Bold | FontStyle.Italic));
var brush=new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(validateCode, font, brush, 3, 2);
//画图片的前景干扰点
for (var i=0; i < 100; i++)
{
var x=random.Next(image.Width);
var y=random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
//保存图片数据
var stream=new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
return stream.ToArray();
}
finally
{
g.Dispose();
image.Dispose();
}
}
/// <summary>
/// 得到验证码图片的长度
/// </summary>
/// <param name="validateNumLength">验证码的长度</param>
/// <returns></returns>
public static int GetImageWidth(int validateNumLength)
{
return (int)(validateNumLength * 12.0);
}
/// <summary>
/// 得到验证码的高度
/// </summary>
/// <returns></returns>
public static double GetImageHeight()
{
return 23;
}
}
}
关于asp.net 图片验证码的HtmlHelper的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
