当前位置: 首页 > news >正文

MVC 生成验证码

在mvc 出现之前 生成验证码思路

在一个html页面上,生成一个验证码,在把这个页面嵌入到需要验证码的页面中。

JS生成验证码
<script type="text/javascript">jQuery(function ($) {/**生成一个随机数**/function randomNum(min, max) {return Math.floor(Math.random() * (max - min) + min);}/**生成一个随机色**/function randomColor(min, max) {var r = randomNum(min, max);var g = randomNum(min, max);var b = randomNum(min, max);return "rgb(" + r + "," + g + "," + b + ")";}var code = drawPic();document.getElementById("changeImg").onclick = function (e) {e.preventDefault();code = drawPic();}/**绘制验证码图片**/function drawPic() {var canvas = document.getElementById("canvas");var width = canvas.width;var height = canvas.height;//获取该canvas的2D绘图环境 var ctx = canvas.getContext('2d');ctx.textBaseline = 'bottom';/**绘制背景色**/ctx.fillStyle = randomColor(180, 240);//颜色若太深可能导致看不清ctx.fillRect(0, 0, width, height);/**绘制文字**/var str = 'ABCEFGHJKLMNPQRSTWXY123456789';var code = "";//生成四个验证码for (var i = 1; i <= 4; i++) {var txt = str[randomNum(0, str.length)];code = code + txt;ctx.fillStyle = randomColor(50, 160);//随机生成字体颜色ctx.font = randomNum(15, 40) + 'px SimHei';//随机生成字体大小var x = 10 + i * 25;var y = randomNum(25, 35);var deg = randomNum(-45, 45);//修改坐标原点和旋转角度ctx.translate(x, y);ctx.rotate(deg * Math.PI / 180);ctx.fillText(txt, 0, 0);//恢复坐标原点和旋转角度ctx.rotate(-deg * Math.PI / 180);ctx.translate(-x, -y);}/**绘制干扰线**/for (var i = 0; i < 3; i++) {ctx.strokeStyle = randomColor(40, 180);ctx.beginPath();ctx.moveTo(randomNum(0, width / 2), randomNum(0, height / 2));ctx.lineTo(randomNum(0, width / 2), randomNum(0, height));ctx.stroke();}/**绘制干扰点**/for (var i = 0; i < 50; i++) {ctx.fillStyle = randomColor(255);ctx.beginPath();ctx.arc(randomNum(0, width), randomNum(0, height), 1, 0, 2 * Math.PI);ctx.fill();}$("#code").val(code);return code;}});</script>

在这里插入图片描述
在这里插入图片描述

MVC中验证码

》》》定义一个生成验证码的类

public class VerifyCodeHelper{public static Bitmap CreateVerifyCode(out string code){//建立Bitmap对象,绘图Bitmap bitmap = new Bitmap(200, 60);Graphics graph = Graphics.FromImage(bitmap);graph.FillRectangle(new SolidBrush(Color.White), 0, 0, 200, 60);Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);Random r = new Random();string letters = "ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789";StringBuilder sb = new StringBuilder();//添加随机的五个字母for (int x = 0; x < 5; x++){string letter = letters.Substring(r.Next(0, letters.Length - 1), 1);sb.Append(letter);graph.DrawString(letter, font, new SolidBrush(Color.Black), x * 38, r.Next(0, 15));}code = sb.ToString();//混淆背景Pen linePen = new Pen(new SolidBrush(Color.Black), 2);for (int x = 0; x < 6; x++)graph.DrawLine(linePen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));return bitmap;}}

》》》》Action

        /// <summary>/// 验证码 FileContentResult/// </summary>/// <returns></returns>[AllowAnonymous]public ActionResult VerifyCode(){string code = "";Bitmap bitmap = VerifyCodeHelper.CreateVerifyCode(out code);   //声明一个内存流      MemoryStream stream = new MemoryStream();//把bitmap存入这个  流中bitmap.Save(stream, ImageFormat.Gif);// Controller中File方法  返回  FileContentResult, // FileContentResult继承FileResult,FileResult又继承    ActionResultreturn File(stream.ToArray(), "image/gif");//返回FileContentResult图片}/// <summary>/// 验证码  直接写入Response/// </summary>[AllowAnonymous]public void Verify(){string code = "";Bitmap bitmap = VerifyCodeHelper.CreateVerifyCode(out code);bitmap.Save(base.Response.OutputStream, ImageFormat.Gif);base.Response.ContentType = "image/gif";}

在html页面中

验证码图片

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 代码随想录算法训练营第11天
  • 知识图谱研究综述笔记
  • 根据vue学习react
  • Halcon机器视觉15种缺陷检测案例_2不均匀表面刮伤检测
  • VS编译和使用modbus库
  • Typescript 的联合类型和交叉类型
  • 【C++语言】正则表达式
  • 主机安全-进程、命令攻击与检测
  • 哪些事件会导致浏览器窗口宽高变化
  • 使用jsencrypt在web前端对字符串进行Ras加密
  • MySQL 日志深度解析:从查询执行到性能优化
  • 从零开始实现大语言模型(五):缩放点积注意力机制
  • idea启动ssm项目详细教程
  • llama-recipes
  • YOLO v8进行目标检测的遇到的bug小结
  • 【译】JS基础算法脚本:字符串结尾
  • C# 免费离线人脸识别 2.0 Demo
  • ES学习笔记(12)--Symbol
  • LeetCode18.四数之和 JavaScript
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP那些事儿
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • webpack入门学习手记(二)
  • Web标准制定过程
  • 关于for循环的简单归纳
  • 经典排序算法及其 Java 实现
  • 开发基于以太坊智能合约的DApp
  • 实现菜单下拉伸展折叠效果demo
  • 算法-图和图算法
  • 学习HTTP相关知识笔记
  • k8s使用glusterfs实现动态持久化存储
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Spring Boot 分片上传文件
  • #Java第九次作业--输入输出流和文件操作
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (7)摄像机和云台
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (论文阅读11/100)Fast R-CNN
  • (三十五)大数据实战——Superset可视化平台搭建
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)ABI是什么
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (自用)仿写程序
  • .NET 中的轻量级线程安全
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NetCore项目nginx发布
  • /*在DataTable中更新、删除数据*/
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题