110,536
社区成员
发帖
与我相关
我的任务
分享
#region 生成汉字随机数
/// <summary>
/// 生成汉字随机数
/// </summary>
/// <param name="rd">随机数对象</param>
/// <param name="intLength">随机数的个数</param>
/// <returns></returns>
public static string setRegionCodeRand(Random rd, int intLength)
{
string strRegCodeRand = "";
Encoding encGB = Encoding.GetEncoding("gb2312");
string[] strBase = new string[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
object[] objBytes = new object[intLength];
for (int i = 0; i < intLength; i++)
{
int rnd1 = rd.Next(11, 14);
string str_rnd1 = strBase[rnd1].Trim();
rd = new Random(rnd1 * unchecked((int)DateTime.Now.Ticks) + i);
int rnd2;
if (rnd1 == 13)
{
rnd2 = rd.Next(0, 7);
}
else
{
rnd2 = rd.Next(0, 16);
}
string str_rnd2 = strBase[rnd2].Trim();
rd = new Random(rnd2 * unchecked((int)DateTime.Now.Ticks) + i);
int rnd3 = rd.Next(10, 16);
string str_rnd3 = strBase[rnd3].Trim();
rd = new Random(rnd3 * unchecked((int)DateTime.Now.Ticks) + i);
int rnd4;
if (rnd3 == 10)
{
rnd4 = rd.Next(1, 16);
}
else if (rnd3 == 15)
{
rnd4 = rd.Next(0, 15);
}
else
{
rnd4 = rd.Next(0, 16);
}
string str_rnd4 = strBase[rnd4].Trim();
byte byRand1 = Convert.ToByte(str_rnd1 + str_rnd2, 16);
byte byRand2 = Convert.ToByte(str_rnd3 + str_rnd4, 16);
byte[] byRands = new byte[] { byRand1, byRand2 };
objBytes.SetValue(byRands, i);
}
string[] strRegCode = new string[intLength];
for (int j = 0; j < intLength; j++)
{
strRegCode[j] = encGB.GetString((byte[])Convert.ChangeType(objBytes[j], typeof(byte[])));
strRegCodeRand += strRegCode[j].Trim();
}
return strRegCodeRand;
}
#endregion
public static void strRandMap(string saveImagePath)
{
//建立位图对象
Bitmap bitmap = new Bitmap(90, 30, PixelFormat.Format48bppRgb);
//根据上面创建的位图对象创建绘图面
Graphics graphics = Graphics.FromImage(bitmap);
//以指定的颜色填充矩形区
graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 90, 30));
//创建字体对象
Font txtFont = new Font("gb2312", 12, FontStyle.Bold);
//创建RectangleF结构指定一个区域
RectangleF rectangleF = new RectangleF(0, 0, 90, 30);
//创建随机数对象
Random random = new Random();
//获取随机数
string strRand = setRegionCodeRand(random, 6);
//string strRand = setRegionCodeRand(random, 4);
//使用指定的颜色填充上面RectangleF结构指定的矩形区域
graphics.FillRectangle(new SolidBrush(Color.BurlyWood), rectangleF);
StringFormat sformat = new StringFormat();
sformat.Alignment = StringAlignment.Center;
sformat.LineAlignment = StringAlignment.Center;
//在上面填充的矩形区域中填充上面生成的随机数
graphics.DrawString(strRand, txtFont, new SolidBrush(Color.Blue), rectangleF, sformat);
//把创建的位图保存到指定的路径
bitmap.Save(HttpContext.Current.Server.MapPath("") + saveImagePath, ImageFormat.Gif);
}
Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 8.5)), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//Font font = new System.Drawing.Font("宋体", 10, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
//System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Black, Color.Black,90, true);
//g.DrawString(checkCode, font, brush, 2, 2);
g.FillRectangle(new System.Drawing.SolidBrush(Color.Black), 0, 0, image.Width, 20);
g.Clear(Color.White);
g.DrawString(checkCode, new Font("宋体", 10, FontStyle.Bold), Brushes.Black, new PointF(5, 5));
MemoryStream ms = new MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}