xinjiang/SGGL/BLL/Common/Captcha.cs

58 lines
2.0 KiB
C#

using System;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
namespace BLL
{
public class Captcha
{
public static byte[] GenerateCaptcha(out string captchaText)
{
Random random = new Random();
//StringBuilder sb = new StringBuilder();
// 生成4位随机数字作为验证码
//for (int i = 0; i < 4; i++)
//{
// sb.Append(random.Next(0, 9));
//}
//captchaText = sb.ToString();
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
captchaText = new string(Enumerable.Repeat(chars, 4)
.Select(s => s[random.Next(s.Length)]).ToArray());
using (Bitmap bitmap = new Bitmap(100, 30))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.Clear(Color.White);
// 绘制边框
g.DrawRectangle(new Pen(Color.Black), 0, 0, bitmap.Width - 1, bitmap.Height - 1);
// 绘制验证码
Font font = new Font("Arial", 15, FontStyle.Bold);
g.DrawString(captchaText, font, Brushes.Black, 5, 5);
// 添加噪声线
for (int i = 0; i < 10; i++)
{
Point start = new Point(random.Next(bitmap.Width), random.Next(bitmap.Height));
Point end = new Point(random.Next(bitmap.Width), random.Next(bitmap.Height));
g.DrawLine(new Pen(Color.Black), start, end);
}
// 保存图片到内存流
using (MemoryStream memoryStream = new MemoryStream())
{
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
return memoryStream.ToArray();
}
}
}
}
}
}