如何随机生成验证码的
验证码是我们经常要用到的东西,虽然不是很重要,但是有些地方偏偏离不开验证码,验证码可以在登陆的时候过滤机器,使登陆得到更安全的保障,而不是过滤人,要知道验证码也是人做出来的,再厉害也没人脑厉害吧,但是,验证码如何生成的呢?下面是我分享的验证码生成步骤,首先呀,获得随机字符串,然后要确定随机数的长度,最后就是随机数字符串了。
产生数字和密码混合的随机数的方法
string strReturn = string.Empty;
Random random = new Random()
肯定的,验证码生成要多次利用for循环,这里也不例外,利用for循环来根据当前随机数来确定字符串。
for (int i = 0; i < intLength; i++)
产生一个非负随机整数
int intRandom = random.Next();
intRandom % 3 获取的是intRandom/3 得到的余数
产生数字,位数来产生数字
cRerult = (char)(0x30 + (intRandom % 10));
位数产生大写字母:大写字符 65-97 A 65
cRerult = (char)(0x41 + (intRandom % 0x1a));
余数为2,产生小写字母 98-116
cRerult = (char)(0x61 + (intRandom % 0x1a));
strReturn += cRerult.ToString();
有了数字和字母的结合还是不够滴,要不断绘制新的验证码图片,只有这样才能保证更安全,根据字符串创建验证码,新增图片
Bitmap newBitmap = new Bitmap(strRandom.Length * 20, 30);
Graphics g = Graphics.FromImage(newBitmap);
g.Clear(Color.White);
在图片上绘制文字
SolidBrush = new SolidBrush(Color.Red);
g.DrawString(strRandom, new Font(“Aril”, 17), solidBrush, 12, 1);
在图片上绘制干扰线
Random random = new Random();
利用For循环产生一条线,并绘制到画布。 起始点(x,y) 总结点
int x1 = random.Next(newBitmap.Width);
int y1 = random.Next(newBitmap.Height);
int x2 = random.Next(newBitmap.Width);
int y2 = random.Next(newBitmap.Height);
g.DrawLine(new Pen(Color.DarkGray), x1, y1, x2, y2);
利用for循环绘制图片的前景干扰点
int x = random.Next(newBitmap.Width);
int y = random.Next(newBitmap.Height);
ewBitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
在最外边绘制边框
g.DrawRectangle(new Pen(Color.Blue), 0, 0, newBitmap.Width, newBitmap.Height);
g.DrawRectangle(new Pen(Color.Blue), -1, -1, newBitmap.Width, newBitmap.Height);
将图转保存到内存流中
MemoryStream ms = new MemoryStream();
newBitmap.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
到这一步,验证码基本生成成功啦,最后将内容写入byte数组返回页面就可以使用啦,是不是很简单,那还等什么呢?
如何随机生成验证码的
验证码是我们经常要用到的东西,虽然不是很重要,但是有些地方偏偏离不开验证码,验证码可以在登陆的时候过滤机器,使登陆得到更安全的保障,而不是过滤人,要知道验证码也是人做出来的,再厉害也没人脑厉害吧,但是,验证码如何生成的呢?下面是我分享的验证码生成步骤,首先呀,获得随机字符串,然后要确定随机数的长度,最后就是随机数字符串了。
产生数字和密码混合的随机数的方法
string strReturn = string.Empty;
Random random = new Random()
肯定的,验证码生成要多次利用for循环,这里也不例外,利用for循环来根据当前随机数来确定字符串。
for (int i = 0; i < intLength; i++)
产生一个非负随机整数
int intRandom = random.Next();
intRandom % 3 获取的是intRandom/3 得到的余数
产生数字,位数来产生数字
cRerult = (char)(0x30 + (intRandom % 10));
位数产生大写字母:大写字符 65-97 A 65
cRerult = (char)(0x41 + (intRandom % 0x1a));
余数为2,产生小写字母 98-116
cRerult = (char)(0x61 + (intRandom % 0x1a));
strReturn += cRerult.ToString();
有了数字和字母的结合还是不够滴,要不断绘制新的验证码图片,只有这样才能保证更安全,根据字符串创建验证码,新增图片
Bitmap newBitmap = new Bitmap(strRandom.Length * 20, 30);
Graphics g = Graphics.FromImage(newBitmap);
g.Clear(Color.White);
在图片上绘制文字
SolidBrush = new SolidBrush(Color.Red);
g.DrawString(strRandom, new Font(“Aril”, 17), solidBrush, 12, 1);
在图片上绘制干扰线
Random random = new Random();
利用For循环产生一条线,并绘制到画布。 起始点(x,y) 总结点
int x1 = random.Next(newBitmap.Width);
int y1 = random.Next(newBitmap.Height);
int x2 = random.Next(newBitmap.Width);
int y2 = random.Next(newBitmap.Height);
g.DrawLine(new Pen(Color.DarkGray), x1, y1, x2, y2);
利用for循环绘制图片的前景干扰点
int x = random.Next(newBitmap.Width);
int y = random.Next(newBitmap.Height);
ewBitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
在最外边绘制边框
g.DrawRectangle(new Pen(Color.Blue), 0, 0, newBitmap.Width, newBitmap.Height);
g.DrawRectangle(new Pen(Color.Blue), -1, -1, newBitmap.Width, newBitmap.Height);
将图转保存到内存流中
MemoryStream ms = new MemoryStream();
newBitmap.Save(ms, ImageFormat.Jpeg);
return ms.ToArray();
到这一步,验证码基本生成成功啦,最后将内容写入byte数组返回页面就可以使用啦,是不是很简单,那还等什么呢?
发布评论