自己写了个C# 生成简单验证码和加减算法验证码
思路:
1.随机生成数字或字母,如果是加减验证码的话生成数字和 + -
2.绘制到Image上
3.随机生成位置,在上面绘制大小为1,1的噪点,绘制多少看具体效果。一般100~200左右。
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace Controller
{
/// <summary>
/// 验证码帮助类
/// </summary>
public class CheckCodeHelper
{
/// <summary>
/// 验证码长度
/// </summary>
public int CodeWidth;
/// <summary>
/// 验证码高度
/// </summary>
public int CodeHeight;
/// <summary>
/// 验证码结果值
/// </summary>
public string ReturnValue;
public CheckCodeHelper(int width, int height)
{
CodeWidth = width;
CodeHeight = height;
ReturnValue = null;
}
/// <summary>
/// 生成随机数字
/// </summary>
/// <returns></returns>
private string GenerateNumbers(int count)
{
string strOut = "";
Random random = new Random();
for (int i = 0; i < count; i++)
{
string num = Convert.ToString(random.Next(10000) % 10);
strOut += num;
}
return strOut.Trim();
}
/// <summary>
/// 生成随机字符
/// </summary>
/// <returns></returns>
private string GenerateCharacters(int count)
{
string strOut = "";
Random random = new Random();
for (int i = 0; i < count; i++)
{
string num = Convert.ToString((char)(65 + random.Next(10000) % 26));
strOut += num;
}
return strOut.Trim();
}
private string GetNumAndStrCharacters(int count)
{
string outStr = "";
string nums = GenerateNumbers(count);
string str = GenerateCharacters(count);
Random random = new Random();
string value = nums + str;
for (int i = 0; i < count; i++)
{
outStr += value.Substring(random.Next(0, value.Length), 1);
}
ReturnValue = outStr;
return outStr;
}
/// <summary>
/// 获取加减计算验证码
/// </summary>
/// <returns></returns>
private string GetMathNumbers()
{
string strOut = "";
int ValueOut = 0;
Random random = new Random();
int number = random.Next(0, 30);
int number2 = random.Next(0, 30);
int DectX = random.Next(0, 100) % 2;
if (DectX == 0)
{
strOut = number + " + " + number2;
ValueOut = number + number2;
}
else
{
if (number >= number2)
{
strOut = number + " - " + number2;
ValueOut = number - number2;
}
else
{
strOut = number2 + " - " + number;
ValueOut = number2 - number;
}
}
ReturnValue = ValueOut.ToString();
return strOut;
}
/// <summary>
/// 创建加减计算的验证码
/// </summary>
/// <returns></returns>
public Image CreateMathImage()
{
Bitmap bmp = new Bitmap(CodeWidth, CodeHeight);
Graphics graph = Graphics.FromImage(bmp);
Color[] penColors = new Color[] { Color.Black, Color.Red, Color.Blue, Color.Green, Color.HotPink };
Color[] colors = new Color[] { Color.Black, Color.Red, Color.Blue, Color.Green, Color.HotPink, Color.Yellow };
FontStyle[] fontStyles = new FontStyle[] { FontStyle.Regular, FontStyle.Bold, FontStyle.Italic };
Random random = new Random();
string number = GetMathNumbers();
for (int i = 0; i < number.Length; i++)
{
Font font = new Font("宋体", random.Next(12, 16), fontStyles[random.Next(0, fontStyles.Length)]);
Color color = penColors[random.Next(0, penColors.Length)];
graph.DrawString(number.Substring(i, 1), font, new SolidBrush(color), (i * 10), 5);
}
//加噪点
for (int i = 0; i < 200; i++)
{
Color color = colors[random.Next(0, colors.Length)];
graph.FillRectangle(new SolidBrush(color), random.Next(0, CodeWidth), random.Next(0, CodeHeight), 1, 1);
}
graph.Dispose();
return bmp;
}
/// <summary>
/// 创建字符和数字的验证码
/// </summary>
/// <returns></returns>
public Image CreateNumAndStrImage()
{
Bitmap bmp = new Bitmap(CodeWidth, CodeHeight);
Graphics graph = Graphics.FromImage(bmp);
Color[] penColors = new Color[] { Color.Black, Color.Red, Color.Blue, Color.Green, Color.HotPink };
Color[] colors = new Color[] { Color.Black, Color.Red, Color.Blue, Color.Green, Color.HotPink, Color.Yellow };
FontStyle[] fontStyles = new FontStyle[] { FontStyle.Regular, FontStyle.Bold, FontStyle.Italic };
Random random = new Random();
string number = GetNumAndStrCharacters(4);
for (int i = 0; i < number.Length; i++)
{
Font font = new Font("宋体", random.Next(14, 20), fontStyles[random.Next(0, fontStyles.Length)]);
Color color = penColors[random.Next(0, penColors.Length)];
graph.DrawString(number.Substring(i, 1), font, new SolidBrush(color), (i * 18), 5);
}
//加噪点
for (int i = 0; i < 200; i++)
{
Color color = colors[random.Next(0, colors.Length)];
graph.FillRectangle(new SolidBrush(color), random.Next(0, CodeWidth), random.Next(0, CodeHeight), 1, 1);
}
graph.Dispose();
return bmp;
}
}
}
文章评论