58 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|