完成接口,生成器,配置等
This commit is contained in:
parent
20ed901174
commit
6964a121f0
|
@ -1,6 +1,4 @@
|
||||||
using System;
|
using System.IO;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Falcon.ValidateCode
|
namespace Falcon.ValidateCode
|
||||||
{
|
{
|
||||||
|
@ -9,6 +7,17 @@ namespace Falcon.ValidateCode
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IValidateCode
|
public interface IValidateCode
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 生成随机代码
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
string GenerateCode();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据代码生成验证图片
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="code"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Stream GenerateImgStream(string code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
95
Falcon.ValidateCode/ValidateCode.cs
Normal file
95
Falcon.ValidateCode/ValidateCode.cs
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Falcon.ValidateCode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 图片验证码
|
||||||
|
/// </summary>
|
||||||
|
public class VerificationCodeServices:IValidateCode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 生成选项
|
||||||
|
/// </summary>
|
||||||
|
public ValidateCodeOption Options { get; set; }
|
||||||
|
private static Random _ran = new Random(unchecked((int)DateTime.Now.Ticks));
|
||||||
|
/// <summary>
|
||||||
|
/// 实例化验证码生成器
|
||||||
|
/// </summary>
|
||||||
|
public VerificationCodeServices() : this(new ValidateCodeOption()) {
|
||||||
|
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 通过提供配置实例化验证码生成器
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="option"></param>
|
||||||
|
public VerificationCodeServices(ValidateCodeOption option) {
|
||||||
|
this.Options = option;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 生成随机验证码
|
||||||
|
/// </summary>
|
||||||
|
public string GenerateCode() {
|
||||||
|
var charLen = this.Options.CodeChars.Length;
|
||||||
|
StringBuilder code = new StringBuilder(charLen);
|
||||||
|
for(int i = 0;i < this.Options.CodeLength;i++) {
|
||||||
|
var nextC = _ran.Next(charLen);
|
||||||
|
var c = this.Options.CodeChars.Substring(nextC,1);
|
||||||
|
code.Append(c);
|
||||||
|
}
|
||||||
|
return code.ToString();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 生成图片数据流
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="code"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Stream GenerateImgStream(string code) {
|
||||||
|
if(string.IsNullOrEmpty(code)) {
|
||||||
|
throw new ArgumentNullException(nameof(code));
|
||||||
|
}
|
||||||
|
Bitmap Img = null;
|
||||||
|
Graphics graphics = null;
|
||||||
|
MemoryStream ms = null;
|
||||||
|
Random random = new Random();
|
||||||
|
//颜色集合
|
||||||
|
Color[] color = { Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple };
|
||||||
|
//字体集合
|
||||||
|
string[] fonts = { "Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体" };
|
||||||
|
//定义图像的大小,生成图像的实例
|
||||||
|
Img = new Bitmap((int)code.Length * 18,32);
|
||||||
|
graphics = Graphics.FromImage(Img);//从Img对象生成新的Graphics对象
|
||||||
|
graphics.Clear(Color.White);//背景设为白色
|
||||||
|
|
||||||
|
//在随机位置画背景点
|
||||||
|
|
||||||
|
for(int i = 0;i < 100;i++) {
|
||||||
|
int x = random.Next(Img.Width);
|
||||||
|
int y = random.Next(Img.Height);
|
||||||
|
graphics.DrawRectangle(new Pen(Color.LightGray,0),x,y,1,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//验证码绘制在graphics中
|
||||||
|
for(int i = 0;i < code.Length;i++) {
|
||||||
|
int colorIndex = random.Next(7);//随机颜色索引值
|
||||||
|
int fontIndex = random.Next(4);//随机字体索引值
|
||||||
|
Font font = new Font(fonts[fontIndex],15,FontStyle.Bold);//字体
|
||||||
|
Brush brush = new SolidBrush(color[colorIndex]);//颜色
|
||||||
|
int y = 4;
|
||||||
|
if((i + 1) % 2 == 0)//控制验证码不在同一高度
|
||||||
|
{
|
||||||
|
y = 2;
|
||||||
|
}
|
||||||
|
graphics.DrawString(code.Substring(i,1),font,brush,3 + (i * 12),y);//绘制一个验证字符
|
||||||
|
}
|
||||||
|
ms = new MemoryStream();//生成内存流对象
|
||||||
|
Img.Save(ms,ImageFormat.Png);//将此图像以Png图像文件的格式保存到流中
|
||||||
|
graphics.Dispose();
|
||||||
|
Img.Dispose();
|
||||||
|
return ms;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
Falcon.ValidateCode/ValidateCodeOption.cs
Normal file
21
Falcon.ValidateCode/ValidateCodeOption.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Falcon.ValidateCode
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 生成验证码选项
|
||||||
|
/// </summary>
|
||||||
|
public class ValidateCodeOption
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 验证码使用的字符
|
||||||
|
/// </summary>
|
||||||
|
public string CodeChars { get; set; } = "0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
|
||||||
|
/// <summary>
|
||||||
|
/// 生成验证码的长度
|
||||||
|
/// </summary>
|
||||||
|
public int CodeLength { get; set; } = 5;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user