MVC+EasyUI+三层新闻网站建立 验证码生成(三)
发布时间 - 2026-01-11 02:12:56 点击率:次我们在项目中的NewWeb.Common类库里面建立一个类用来存放生成验证码的代码。

这里我类的名字叫 ValidateCode
生成验证码(ValidateCode)类的代码:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace NewWeb.Common
{
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)
{
int[] randMembers = new int[length];
int[] validateNums = new int[length];
string validateNumberStr = "";
//生成起始序列值
int seekSeek = unchecked((int)DateTime.Now.Ticks);
Random seekRand = new Random(seekSeek);
int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
int[] seeks = new int[length];
for (int i = 0; i < length; i++)
{
beginSeek += 10000;
seeks[i] = beginSeek;
}
//生成随机数字
for (int i = 0; i < length; i++)
{
Random rand = new Random(seeks[i]);
int pownum = 1 * (int)Math.Pow(10, length);
randMembers[i] = rand.Next(pownum, Int32.MaxValue);
}
//抽取随机数字
for (int i = 0; i < length; i++)
{
string numStr = randMembers[i].ToString();
int numLength = numStr.Length;
Random rand = new Random();
int numPosition = rand.Next(0, numLength - 1);
validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
}
//生成验证码
for (int i = 0; i < length; i++)
{
validateNumberStr += validateNums[i].ToString();
}
return validateNumberStr;
}
/// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="context">要输出到的page对象</param>
/// <param name="validateNum">验证码</param>
public void CreateValidateGraphic(string validateCode, HttpContext context)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int 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));
LinearGradientBrush 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 (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int 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);
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(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 22.5;
}
//C# MVC 升级版
/// <summary>
/// 创建验证码的图片
/// </summary>
/// <param name="containsPage">要输出到的page对象</param>
/// <param name="validateNum">验证码</param>
public byte[] CreateValidateGraphic(string validateCode)
{
Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int 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));
LinearGradientBrush 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 (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int 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);
//保存图片数据
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
//输出图片流
return stream.ToArray();
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
}
这时需要在程序中引入两个命名空间 System.Drawing和System.Web。
完成之后到LoginController控制器里面去新建一个ActionResult 就叫ValidateCode 用于生成验证码。(这里要先对NewWeb.Common引用)
生成验证码代码如下:
public ActionResult ValidateCode()
{
Common.ValidateCode validateCode = new Common.ValidateCode();
string code = validateCode.CreateValidateCode(4); //生成的验证码4个长度
Session["validateCode"] = code;
byte[] buffer = validateCode.CreateValidateGraphic(code);//创建验证码图片
return File(buffer, "image/jpeg");//返回图片
}
到Login视图里面的index页面去把img的src补充为:
<tr>
<td style="width:20px"></td>
<td><img id="image" src="/Login/ValidateCode/?id=1" style="float: left; height: 24px;" /></td>
<td><a href="javascript:void(0)" onclick="changeCheckCode();return false;">看不清,换一张</a></td>
</tr>
就可以看到页面上面显示出来验证码
下面要做的就是点击切换验证码,这是通过js实现的代码
<script type="text/javascript">
$(function () {
initWin(); //初始化登录窗体
changeCheckCode(); //切换验证码
});
function initWin() {
$("#win").window({
title: "登录",
width: 400,
height: 270,
collapsible: false,
minimizable: false,
maximizable: false,
closable: false,
modal: true,
resizable: false,
});
}
//切换验证码
function changeCheckCode() {
$("#changeVcode").click(function () {
$("#image").attr("src", $("#image").attr("src") + 1);
});
}
</script>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# MVC
# 新闻网站
# 验证码
# MVC+EasyUI+三层新闻网站建立 建站准备工作(一)
# MVC+EasyUI+三层新闻网站建立 主页布局的方法(五)
# MVC+EasyUI+三层新闻网站建立 实现登录功能(四)
# MVC+EasyUI+三层新闻网站建立 后台登录界面的搭建(二)
# 一步步打造简单的MVC电商网站BooksStore(2)
# 一步步打造简单的MVC电商网站BooksStore(1)
# MVC4制作网站教程第四章 更新栏目4.3
# MVC4制作网站教程第四章 浏览栏目4.2
# MVC4制作网站教程第四章 添加栏目4.1
# MVC+EasyUI+三层新闻网站建立 tabs标签制作方法(六)
# 清空
# 背景色
# 这是
# 要做
# 要先
# 就叫
# 建立一个
# 名字叫
# 升级版
# 大家多多
# 去把
# 就可以
# 新建一个
# 类库
# ToString
# numLength
# Length
# context
# page
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
jQuery中的100个技巧汇总
深圳网站制作培训,深圳哪些招聘网站比较好?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
bootstrap日历插件datetimepicker使用方法
简单实现Android文件上传
详解Android图表 MPAndroidChart折线图
网站制作软件有哪些,制图软件有哪些?
如何自定义建站之星模板颜色并下载新样式?
如何自定义建站之星网站的导航菜单样式?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
如何在腾讯云免费申请建站?
Laravel如何实现事件和监听器?(Event & Listener实战)
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何在搬瓦工VPS快速搭建网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
Bootstrap整体框架之CSS12栅格系统
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
公司门户网站制作流程,华为官网怎么做?
如何在阿里云域名上完成建站全流程?
JavaScript模板引擎Template.js使用详解
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Swift中循环语句中的转移语句 break 和 continue
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
iOS发送验证码倒计时应用
如何用PHP快速搭建CMS系统?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
南京网站制作费用,南京远驱官方网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel怎么上传文件_Laravel图片上传及存储配置
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
SQL查询语句优化的实用方法总结
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道

