博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码生成 c#
阅读量:5773 次
发布时间:2019-06-18

本文共 3808 字,大约阅读时间需要 12 分钟。

1.验证码生成类

1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.Drawing.Drawing2D; 5 using System.Drawing.Imaging; 6 using System.IO; 7 using System.Linq; 8 using System.Web; 9 using System.Web.UI.WebControls;10 11 namespace AuthenticationDemo.Common12 {13     public class ValidationCodeHelper14     {15         /// 16         /// 创建验证码17         /// 18         /// 验证码位数19         /// 
20 public string CreateCode(int codeLength)21 {22 // 不要 "0"23 string so = "1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";24 string[] strArr = so.Split(',');25 string code = "";26 Random rand = new Random();27 for (int i = 0; i < codeLength; i++)28 {29 code += strArr[rand.Next(0, strArr.Length)];30 }31 return code;32 }33 /// 34 /// 产生图片35 /// 36 /// 验证码37 public byte[] CreateImage(string code)38 {39 Bitmap image = new Bitmap(64, 32);40 Graphics g = Graphics.FromImage(image);41 try42 {43 //随机转动角度 44 //int randAngle = 45;45 //实例随机生成器46 Random random = new Random();47 //清空图片背景色48 g.Clear(Color.White);49 //画图片的干扰线50 for (int i = 0; i < 25; i++)51 {52 int x1 = random.Next(image.Width);53 int x2 = random.Next(image.Width);54 int y1 = random.Next(image.Height);55 int y2 = random.Next(image.Height);56 g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);57 }58 Font font = new Font("Arial", 16, (FontStyle.Bold | FontStyle.Italic));59 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),60 Color.Blue, Color.DarkRed, 1.2f, true);61 //float angle = random.Next(-randAngle,randAngle);62 //g.RotateTransform(angle);63 g.DrawString(code, font, brush, 3, 2);64 //g.RotateTransform(angle);65 //画图片的前景干扰点66 for (int i = 0; i < 100; i++)67 {68 int x = random.Next(image.Width);69 int y = random.Next(image.Height);70 image.SetPixel(x, y, Color.FromArgb(random.Next()));71 }72 //画图片的边框线73 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);74 //保存图片数据75 MemoryStream ms = new MemoryStream();76 image.Save(ms, ImageFormat.Jpeg);77 //输出图片流78 return ms.ToArray();79 }80 catch (Exception)81 {82 throw;83 }84 finally85 {86 g.Dispose();87 image.Dispose();88 }89 }90 91 }92 }

2.后台调用

public ActionResult GetVCode()        {            ValidationCodeHelper vc = new ValidationCodeHelper();            //验证码            string code = vc.CreateCode(4);            Session["vCode"] = code;//保存生成的验证码,提供之后与用户的输入的验证码比较            byte[] bytes = vc.CreateImage(code);            return File(bytes, @"image/jpeg");        }

3.html页面

html代码: 验证码图片 换一张 js代码:

function changeOne() {

var image = document.getElementById('vCodeImage');
image.src = "@Url.Action("GetVCode","Account")/?t=" + (new Date()).getTime();
}

 

转载于:https://www.cnblogs.com/nzgbk/p/7459001.html

你可能感兴趣的文章
服务器代理(proxy)
查看>>
Java或Web中解决所有路径问题
查看>>
IntelliJ IDEA 创建 maven web项目慢解决办法
查看>>
日志分析查看——grep,sed,sort,awk运用
查看>>
nginx rtmp handshake过程
查看>>
ipv4
查看>>
路由能否做到ARP欺骗防御,抑制广播风暴,内网病毒防御?
查看>>
CVE-2017-1000367:Sudo本地提权漏洞
查看>>
史上最全最正确的zabbix监控tomcat的方法
查看>>
Yahoo Front-end Engineer 电面+Onsite面经
查看>>
你真的了解功能键F7吗?
查看>>
UILable字体样式修改
查看>>
浅谈Java等软件和嵌入式的区别,给你明确一个方向
查看>>
利用App漏洞获利2800多万元,企业该如何避免类似事件?
查看>>
【刘文彬】区块链 + 大数据:EOS存储
查看>>
云计算的未来市场,谁与争锋?
查看>>
cisco vpc
查看>>
mint系统下安装git
查看>>
打造livecd的过程
查看>>
可变长参数
查看>>