本文只讲解自定义验证码生成的实现,其他两种见我其他文章。

在项目上线使用时,网络对外警察后受到攻击,特别是尝试各种密码组合对用户名密码登录的暴力破解,需要增加验证码来增加用户信息的安全性。

ps:注意生成的验证码要具备时效性,设置3-5分钟失效,或登录一次之后失效。

效果图:

代码如下:

<div class="login_form_num"><input type="text" placeholder="请输入验证码" class="login_input_imgCode" id="imgCode"/><img src="@Url.Action("CheckCodeSimple", "Login")" id="showimg" class="showimg" alt="单击可刷新" onclick="ClickRemoveChangeCode()"/>
</div><script>//刷新验证码function ClickRemoveChangeCode() {var code = $("#showimg").attr("src");$("#showimg").attr("src", code+"?id=1");}</script>
        /// <summary>/// 生成验证码/// </summary>/// <returns></returns>public ActionResult CheckCodeSimple(){validateCode vCode = new validateCode();string code = vCode.CreateValidateCode(5);Session["ValidateCode"] = code;byte[] bytes = vCode.CreateValidateGraphic(code);return File(bytes, @"image/Gif");}

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;namespace Rate.Tools.validateCode
{public class validateCode{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;}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.Red, 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();}}}
}

C#生成自定义登录验证码(微信公众号验证码,邮箱验证码等)相关推荐

  1. 在线生成制作Pornhub的微信公众号封面图

    在线生成制作Pornhub的微信公众号封面图 在线生成制作Pornhub的微信公众号封面图 本工具在线制作具有PornHub风格的Logo.支持自定义文字内容.排列结构.颜色以及文字大小.可以用于微信 ...

  2. 微信扫码登录,微信公众号生成二维码,关注登录nodejs+vue

    微信公众号生成二维码,关注后扫码登录 技术栈为nodejs+vue 有不懂的可以加我微信yizheng369 1.效果 初始: 关注后: 2.源码 此项目为前后端分离项目,前后端代码都在这个仓库里, ...

  3. java微信公众号短信验证码_解决微信端公众号网页获取短信验证码ajax重复调用两次的问题...

    问题背景介绍: 微信公众号网页开发的时候,点击发送短信验证码,如果响应时间超长,目前测试是10秒左右(这个10秒左右,是我自己多次测试总结出来的规律) 超过10秒左右,就会自动请求第二遍,这个问题挺恶 ...

  4. 微信网页扫码登录与微信公众号授权登录的区别

    最近着手开发了微信网页扫码登录和公众号授权登录收获颇丰,两者的开发很类似.以下是我个人摸索过程中发现的两者的异同: 两者都可以通过微信客户端扫码授权的方式,让第三方页面获得微信用户的一些基本信息(昵称 ...

  5. 一个可在微信聊天框中生成短链接的微信公众号

    我们都知道腾讯.新浪的短网址功能并没有官方网站,很多时候我们想生成短链接需要去一些第三方网站,费时费力,有些还带广告或流量劫持! 所以做了这个功能,在聊天框中直接生成短链接,只需要发送网址,一秒内就会 ...

  6. 微信开放平台授权登录与微信公众号授权登录区别

    微信开放平台的scope 类型为 snsapi_login 微信公众号的scope 类型为 snsapi_base 和 snsapi_userinfo

  7. 给女朋友做的每日消息推送微信公众号和邮箱推送

    前言: 最近看见好多做这个微信公众号推送的,其实不难很简单,自己也做了一个给女朋友,用了微信公众号推送和邮箱推送两个版本 网上大多是python版本,我用的是php分别写的微信和邮箱两个推送 项目地址 ...

  8. php实现微信网页授权登录界面,微信公众号 前后端分离实现网页授权登录

    开发语言 后端:thinkphp5+easywechat3+php-jwt 前端:html 实现思路 需要授权登录页面,在页面加载完成时,判断是否登录,如果未登录访问后台授权登录链接 前端代码(主要j ...

  9. WordPress实现关注微信公众号回复关键字获取验证码查看网站隐藏内容

    今天好朋友问我,他有很多优秀的作品发布到网上免费提供给大家查询,但是他说的想通过网友关注他的微信公众号之后获取验证码才能观看.一是吸引一些粉丝,二是证明一下自己的劳动成果.于是我就安排. 一.功能代码 ...

  10. 基于微信公众号(服务号)实现扫码自动登录系统功能

    微信提供了两种方法都可以实现扫描登录. 一种是基于微信公众平台的扫码登录,另一种是基于微信开放平台的扫码登录. 两者的区别: 微信开放平台需要企业认证才能注册(认证费用300元,只需要认证1次,后续不 ...

最新文章

  1. python做定时任务的方式及优缺点_python BlockingScheduler定时任务及其他方式的实现...
  2. OpenStack-MitakaCentos7.2双节点搭建--(二)Keystone(认证服务)
  3. OSChina 周四乱弹 —— 画种稻画美食难画吃屎
  4. unity 继承了 获取_获取继承链
  5. java中apache安装与配置_Apache应用服务器之四:Apache与Tomcat安装与配置
  6. Windows PowerShell Cookbook
  7. vb光环褪去java、c/c++/c#成编程主流
  8. 第一个程序 快速编译链接的办法
  9. 怎么查看oracle中sys的密码修改,oracle sys 密码修改
  10. 程序员10大修炼之道,学会这些月入百万不是梦
  11. C语言·abs()函数
  12. html 悬浮qq,js悬浮QQ在线客服代码(支持拖动)
  13. 服务器系统盘如何克隆,如果把云服务器系统盘克隆
  14. 光驱启动以及联想笔记本电脑如何设置从光驱启动
  15. pandas 报错 KeyError: 0
  16. 自动驾驶开发中的地图
  17. KeyTweak(笔记本键盘设置工具) V2.20 中文版
  18. idea怎么看jdk版本_怎么看自己的jdk版本
  19. PTA基础编程题目集 7-20 打印九九口诀表 (15分)
  20. 无线对讲软交换调度服务器,应急指挥对讲调度SIP通信系统的功能介绍

热门文章

  1. 网页前端项目评审参考标准
  2. .atitit.web 推送实现解决方式集合(3)----dwr3 Reverse Ajax
  3. 专业教练教你如何在一个月内增加20cm弹跳高度
  4. python word中表格字体设置_利用Python-docx 读写 Word 文档中的正文、表格、段落、字体样式等...
  5. 2022-2028年中国家用睡眠监测设备行业市场发展规模及市场前景趋势报告
  6. Vmware 常用命令
  7. USB设备驱动程序导读(9)
  8. PTA 7-66 时间换算
  9. 解锁 2022 Google 游戏开发者峰会 | 游戏业务稳步发展
  10. 从入门到精通ARM(4412)-Linux内核驱动编程【下】-李志勇-专题视频课程