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頁面中

驗證碼圖片

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43330.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python占位符匯總

# f-string (重點掌握) 3.6版本之后才有的 name "杰倫" print(大家好&#xff0c;我是杰倫) print(大家好&#xff0c;我是, name, sep) # 可以但不推薦 name "杰倫" age 45 salary 1.4567 print(大家好&#xff0c;我是杰倫&#xff0c;我今年45&a…

《妃夢千年》第三十章:意外的來信

第三十章&#xff1a;意外的來信 林清婉在皇宮中的地位穩固后&#xff0c;生活似乎又回歸了平靜。然而&#xff0c;這種平靜并沒有持續多久。一天早晨&#xff0c;她收到了一個意外的來信&#xff0c;信封上沒有署名&#xff0c;但她一眼就認出了那熟悉的筆跡——這是她已故父…

RedHat Linux8 修改root管理員賬戶密碼命令

RedHat Linux8 修改root管理員賬戶密碼命令&#xff1a; sudo passwd root RedHat重置root管理員密碼&#xff1a; 1. 查看Linux系統版本信息 cat /etc/redhat-release2. 重置密碼 2.1 進入內核編輯界面 重啟Linux系統并出現引導界面&#xff0c;按下鍵盤上的e鍵進入內…

Prometheus+Grafana主機運行數據

目錄 介紹 安裝Node Exporter 配置Prometheus 驗證配置 導入儀表盤 介紹 Prometheus是一款開源的監控和警報工具&#xff0c;而Node Exporter是Prometheus的一個官方插件&#xff0c;用于采集主機上的各種系統和硬件指標。 安裝Node Exporter 下載最新版本的Node Export…

【AI大模型】ChatGPT-4 對比 ChatGPT-3.5:有哪些優勢

引言 ChatGPT4相比于ChatGPT3.5,有著諸多不可比擬的優勢&#xff0c;比如圖片生成、圖片內容解析、GPTS開發、更智能的語言理解能力等&#xff0c;但是在國內使用GPT4存在網絡及充值障礙等問題&#xff0c;如果您對ChatGPT4.0感興趣&#xff0c;可以私信博主為您解決賬號和環境…

FLinkCDC引起的生產事故(二)

背景&#xff1a; 最近在做實時數據的抽取工作&#xff0c;利用FLinkCDC實時抽取目標庫Oracle的數據到Doris中&#xff0c;但是在抽取的過程中&#xff0c;會導致目標庫的生產庫數據庫非常卡頓&#xff0c;為了避免對生產環境的數據庫造成影響&#xff0c;對生產環境的數據庫利…

谷歌優化的坑與甜:方法策略決定成敗,并非難易程度

對于谷歌優化&#xff0c;本人頗為惱火。眾所周知&#xff0c;我們開設網站旨在吸引眾多訪客&#xff0c;然谷歌這位傲慢的“高嶺之花”&#xff0c;卻令我們煞費苦心。有位友人為提升其網站排名&#xff0c;不惜耗盡心血&#xff0c;然而成效甚微&#xff0c;猶如坐過山車般起…

P3110 [USACO14DEC] Piggy Back S

題意 有一張 n n n 點 m m m 邊的無向圖&#xff0c;Alice 要從 1 1 1 走到 n n n&#xff0c;Bob 要從 2 2 2 走到 n n n。Alice 走一條邊需要花費 B B B&#xff0c;Bob 走一條邊需要花費 E E E&#xff0c;當他們一起走時&#xff0c;走一條邊需要花費 P P P。求他…

OpenJudge 奇數求和

目錄 描述思路樣例輸入樣例輸出CodeCC 總時間限制: 1000ms 內存限制: 65536kB 描述 計算非負整數 m 到 n&#xff08;包括m 和 n &#xff09;之間的所有奇數的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且n 不大于300。例如 m3, n12, 其和則為&#xff1a;357911…

qcom 平臺efuse機器抓取dump log的方法

引言&#xff1a; qcom 平臺機器&#xff0c;一旦efuse后機器將無法抓取dump log qcom 原文&#xff1a; efuse機器抓取dump log的方法如下&#xff1a; 一、修改配置文件&#xff1a; 把kamorta_debugpolicy.xml 在配置了debugpolicy&#xff08;加入串號和打開開關&#x…

怎么檢查SSL證書是否有效?

SSL證書的有效性對于保護網站數據安全和用戶隱私至關重要。然而&#xff0c;有時可能會出現證書過期、無效或被吊銷的情況。為了確保網站的安全性&#xff0c;對SSL證書的有效性進行檢查至關重要。本文將介紹幾種常用的方法來檢查SSL證書的有效性&#xff0c;幫助大家有效評估和…

Android Studio Download Gradle 時慢問題解決

1.騰訊gradle 下載&#xff1a;后面拼接版本&#xff08;gradle-8.0-bin.zip&#xff09; https://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip 2.Android Studio 配置&#xff1a;setting-->gradle-->Use Gradle from 選擇本地文件夾&#xff08;解壓后的bi…

前端開發常用的框架有以下幾種?

React&#xff1a;由Facebook開發&#xff0c;用于構建用戶界面的JavaScript庫。它可以用于構建單頁面應用和移動應用。 Vue&#xff1a;一套用于構建用戶界面的漸進式框架&#xff0c;也是一個基于JavaScript的前端開發框架。Vue易于學習和使用&#xff0c;適用于構建小型到大…

基于Make的c工程No compilation commands found報錯

由于安裝gcc時只安裝了build-essential&#xff0c;沒有將其添加到環境變量中&#xff0c;因此打開Make工程時&#xff0c;CLion會產生如下錯誤&#xff1a; 要解決這個問題&#xff0c;一個方法是將GCC添加到環境變量中&#xff0c;但是這個方法需要修改至少兩個配置文件&…

數據結構——約瑟夫環C語言鏈表實現

約瑟夫環問題由古羅馬史學家約瑟夫&#xff08;Josephus&#xff09;提出&#xff0c;他參加并記錄了公元66—70年猶太人反抗羅馬的起義。在城市淪陷之后&#xff0c;他和40名死硬的將士在附近的一個洞穴中避難。起義者表示“寧為玉碎不為瓦全”&#xff0c;約瑟夫則想“留得青…

dledger原理源碼分析(四)-日志

簡介 dledger是openmessaging的一個組件&#xff0c; raft算法實現&#xff0c;用于分布式日志&#xff0c;本系列分析dledger如何實現raft概念&#xff0c;以及dledger在rocketmq的應用 本系列使用dledger v0.40 本文分析dledger的日志&#xff0c;包括寫入&#xff0c;復制…

liunx下通過設備文件設置串口波特率,并收發

在Linux下&#xff0c;你可以通過串口設備文件設置串口波特率&#xff0c;并進行數據的收發。 確認串口設備文件 首先&#xff0c;確認你要使用的串口設備文件&#xff0c;一般情況下串口設備文件的命名規則為/dev/ttyS0、/dev/ttyS1等&#xff0c;具體的設備文件名可能會有所…

Linux 網絡文件系統 NFS:配置與管理指南

Linux 網絡文件系統 NFS&#xff1a;配置與管理指南 網絡文件系統&#xff08;NFS&#xff09;是一種分布式文件系統協議&#xff0c;允許用戶在網絡上跨不同計算機和操作系統共享文件和存儲資源。NFS 提供了強大的數據共享功能&#xff0c;廣泛應用于企業級存儲解決方案中。本…

網站SEO百度搜索排名—通過關鍵字提升網站流量

添加網站關鍵字 <meta name"keywords" content"系統通過搜索到的關鍵字XXXXXXXXX"> <meta name"description" content"網站的介紹內容XXXXXXXXXXXXXXXXX"> <title>平臺名稱XXXXXXX</title> 在 百度站點管理 …

STM32串口通訊(RS232、RS485、TTL)詳解

前言 STM32串口&#xff08;Serial Communication Interface&#xff09;是STM32微控制器中用于串行通信的接口&#xff0c;通常指的是USART&#xff08;通用同步異步收發器&#xff09;或UART&#xff08;通用異步收發傳輸器&#xff09;。這些接口允許STM32微控制器與其他設…