.Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式。
我结合了自己的经验和网上的验证码资料,总结一下c#验证码开发,直接放代码,文中有注释,可以轻松理解代码意思。
功能:实现了打开登陆页面是生成验证码图片以及点击验证码时,刷新验证码功能,验证码中既包含26个小写字母,也包含10个阿里伯数字(这里都可以自定义)
html和JavaScript代码:
<img id="vivaverificationImg" src="@Url.Action("CreateCheckCodeImage", "VerificationCode")" onclick="vivaChangeVerificationCodeSrc(this)"/>
function vivaChangeVerificationCodeSrc(obj) {
host = window.location.host;
obj.src = "http://" + host + "/VerificationCode/CreateCheckCodeImage?seed=" + Math.random();
}
C#代码(VerificationCode.cs):
/// <summary>
/// 生成验证码图片
/// </summary> public void CreateCheckCodeImage()
{
string checkCode = VerficationCodeSrc(); if (checkCode == null || checkCode.Trim() == String.Empty)
return; //string checkCode = "asfd2";
Bitmap image = new Bitmap(, ); Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = ; i < ; 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.Black), x1, y1, x2, y2);
}
Font font = new Font("Arial", , (FontStyle.Bold)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, , );
//画图片的前景噪音点
for (int i = ; i < ; 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), , , image.Width - , image.Height - );
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
} /// <summary>
/// 生成验证码字符串
/// </summary>
/// <param name="numberOfChars"></param>
/// <returns></returns>
private string VerficationCodeSrc(int numberOfChars)
{
if (numberOfChars > )
{
throw new InvalidOperationException("Random Word Charecters can not be greater than 36.");
}
char[] columns = new char[];
//字母
for (int charPos = ; charPos < + ; charPos++)
columns[charPos - ] = (char)charPos;
//数字
for (int intPos = ; intPos <= ; intPos++)
columns[intPos - ] = (char)intPos; StringBuilder randomBuilder = new StringBuilder();
Random randomSeed = new Random();
for (int incr = ; incr < numberOfChars; incr++)
{
randomBuilder.Append(columns[randomSeed.Next()].ToString());
} return randomBuilder.ToString();
}
实现效果:

如果你觉得我写的对你有用,请给个推荐,如果有什么疑问,请留言。
.Net中验证码图片生成的更多相关文章
- 验证码图片生成工具类——Captcha.java
验证码图片生成工具,使用JAVA生成的图片验证码,调用getRandcode方法获取图片验证码,以流的方式传输到前端页面. 源码如下:(点击下载 Captcha.java) import java. ...
- MVC中验证码的生成
在项目中验证码的生成通常是需要页面无刷新的,所以验证码图片实际是跟在某个input后面的img,通过控制该img来控制验证码显示的位置,例如: <div> <input id=&qu ...
- asp.net验证码图片生成示例
验证码,一个很常见的东西.不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话“内行看门道,外行看热闹!”,仔细琢磨一下还真的是那么一回事.对于怎么实现验证码,闲话不多 ...
- mvc验证码图片生成
/// <summary> ///生成验证码 /// </summary> public class VerifyCode { /// <summary> /// ...
- Android开发中验证码的生成
近期在做电商金融类的项目,验证码的生成方法不可缺少.先学习了一种.经过測试好用.从别处学习的代码,稍修改了一下可选择是否支持识别大写和小写.直接上代码. import android.app.Acti ...
- c# 验证码图片生成类
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...
- django 验证码图片生成视图函数
def verify_code(request): import random # 定义验证码图片背景颜色 宽和高 bgcolor = (random.randrange(20,180),random ...
- python验证码图片生成
环境:win10(64位)+pycharm2018+pillow5.4+python3.7 对Django的跨站请求保护的有所了解的同学会知道{%csrf_token%}在实际上作用并不是那么大,只要 ...
- J2EE如何生成验证码图片和点击刷新验证码
验证码图片生成步骤 创建BufferedImage对象. 获取BufferedImage的画笔,即调用getGraphics()方法获取Graphics对象. 调用Graphics对象的setColo ...
随机推荐
- Moving Average from Data Stream LT346
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- apache反向代理设置
为了方便在内网测试微信接口API <VirtualHost *:80> ServerName wx.abc.com ProxyPreserveHost on ProxyPass / htt ...
- spring学习 十二 AspectJ-based的通知入门 带参数的通知
第一步:编写通知类 package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice ...
- 使用EventLog Analyzer监控、管理及分析日志
- Java的GUI设计中如何跨界面传值
在Java设计中我们会遇到登录界面的信息,在后面的某个情况也需要使用. 比如这是笔者的一个登录界面 可以看到获取密码和账号 在这个时候的功能的完成需要密码和账号 // 登录信息的获取 public S ...
- poj-2777(区间线段树,求种类数模板)
题目链接:http://poj.org/problem?id=2777 参考文章:https://blog.csdn.net/heucodesong/article/details/81038360 ...
- Java基本数据类型与包装类、字符串之间的转换
基本数据类型和包装类的转换:1.装箱:基本数据类型→对应包装类,可分为手动装箱和自动装箱.2.拆箱:包装类→对应基本数据类型,可分为手动拆箱和自动拆箱. 例子:手动装箱:Integer iObj=ne ...
- android bug笔记
昨天集成一个第三方的联盟sdk,然后执行它的代码,程序就会crash,这个第三方的sdk报错日志后面,紧跟着一个友盟分享的报错,我现在也不明白这里是为何把友盟给扯进来了,因为我这步骤操作上并没有调用任 ...
- zookeeper 单机集成部署
概述 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等,是很多分布式的基础设置,比如dubbo,k ...
- php接口 接受ios或android端图片; php接收NSData数据
备注下, [自己无意中用的方法]接收时,设置两个参数,一个是图片名称,另一个是实际文件.然后用$_FILES处理就可以了. 如: $icon = $_POST['icon'];//这个是图片的名称,用 ...