private string CreateRandomCode(int codeCount) { char[] allCharArray = new char[] {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','W','X','Y','Z'}; string s = ""; int temp = -1; Random rand = new Random(); for(int i = 0; i < codeCount; i++) { if(temp != -1) { rand = new Random(i*temp*((int)DateTime.Now.Ticks)); } int t = rand.Next(allCharArray.Length); if(temp == t) { return CreateRandomCode(codeCount); } temp = t; randomCode += allCharArray[t]; } string hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(randomCode,"md5"); Response.Cookies.Add(new HttpCookie("ValidateCode", hash)); return randomCode; }
以上用于生成验证码的,传入位数 倒数第二第三句用于加密后放入Cookie 楼主不需要可以去掉
哦,我这个不要求唯一 sorry 楼主还是用1楼的吧
我也来凑个热闹~~~Public Function RandomPasswd() As String Dim strPasswd As String Dim intNum As Integer = 0 Dim objRandom As Random Dim intLength As Integer objRandom = New Random intLength = objRandom.Next(5) + 8 For i As Integer = 0 To intLength - 1 intNum = objRandom.Next(3) If intNum = 0 Then strPasswd += Chr(objRandom.Next(10) + 48).ToString() ElseIf intNum = 1 Then strPasswd += Chr(objRandom.Next(26) + 65).ToString() Else strPasswd += Chr(objRandom.Next(26) + 97).ToString() End If Next Return strPasswd End Function
这是完整的你只要进去改改数字就可以生成8位的了:希望对你有用! using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;using System.Drawing.Imaging; using System.Drawing; using System.IO;public partial class UserControls_Gif : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string tmp = RndNum(5).ToUpper(); this.Session["ImageV"] = tmp; HttpCookie a = new HttpCookie("ImageV", tmp); Response.Cookies.Add(a); this.CreateCheckCodeImage(tmp); } private void ValidateCode(string VNum) { Bitmap Img = null; Graphics g = null; MemoryStream ms = null; int gheight = VNum.Length * 15; Img = new Bitmap(gheight, 30); g = Graphics.FromImage(Img); //背景颜色 g.Clear(Color.White); //文字字体 Font f = new Font("Arial Black", 11); //文字颜色 SolidBrush s = new SolidBrush(Color.Black); g.DrawString(VNum, f, s, 3, 3); ms = new MemoryStream(); Img.Save(ms, ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType = "image/Jpeg"; Response.BinaryWrite(ms.ToArray()); g.Dispose(); Img.Dispose(); Response.End(); } private string RndNum(int VcodeNum) { string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" + ",q,r,s,t,u,v,w,x,y,z"; string[] VcArray = Vchar.Split(new Char[] { ',' }); string VNum = ""; int temp = -1; Random rand = new Random(); for (int i = 1; i < VcodeNum + 1; i++) { if (temp != -1) { rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); } int t = rand.Next(35); if (temp != -1 && temp == t) { return RndNum(VcodeNum); } temp = t; VNum += VcArray[t]; } return VNum; } private void CreateCheckCodeImage(string checkCode) { if(checkCode == null || checkCode.Trim() == String.Empty) return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 15.5)), 30); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for(int i=0; i<25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 14, (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.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 for(int i=0; i<100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } } }
//生成指定长度的随机字符串 static public string GenerateRandomString(int length) { string s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; string reValue = string.Empty; Random rnd = new Random(DateTime.Now.Millisecond); while( reValue.Length < length ) { string s1=s[rnd.Next(0,s.Length)].ToString(); if( reValue.IndexOf(s1)==-1 ) reValue += s1; } return reValue; }
{
string s="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
string[] sz=s.Split(',');
System.Collections.ArrayList al=new ArrayList();
for(int i=0;i<8;i++)
{
if(al.Count==0)
{
System.Random rd=new Random();
int a=rd.Next(0,35);
al.Add(a);
}
else
{
int c=0;
bool isonly=true;
while(isonly)
{
System.Random rd=new Random();
int b=rd.Next(0,25);
if(this.isone(al,b))
{
isonly=false;
c=b; }
}
al.Add(c);
}
}
string rand="";
for(int j=0;j<al.Count;j++)
{
rand+=sz[Int32.Parse(al[j].ToString())];
}
return rand;
}
下面还有一个判断唯一的函数
private bool isone(System.Collections.ArrayList a,int b)
{
bool one=true;
for(int i=0;i<a.Count;i++)
{
if(a[i].ToString()==b.ToString())
{
one=false;
i=a.Count;
}
}
return one;
}
这为什么是25,新手,不明白....
buyi2004(buyi) :我先试试你的方法吧~大伙谁还有好方法啊~
{
char[] allCharArray = new char[] {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','W','X','Y','Z'};
string s = "";
int temp = -1; Random rand = new Random();
for(int i = 0; i < codeCount; i++)
{
if(temp != -1)
{
rand = new Random(i*temp*((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length);
if(temp == t)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
string hash = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(randomCode,"md5");
Response.Cookies.Add(new HttpCookie("ValidateCode", hash));
return randomCode;
}
倒数第二第三句用于加密后放入Cookie
楼主不需要可以去掉
sorry
楼主还是用1楼的吧
Dim intNum As Integer = 0
Dim objRandom As Random
Dim intLength As Integer objRandom = New Random
intLength = objRandom.Next(5) + 8
For i As Integer = 0 To intLength - 1
intNum = objRandom.Next(3)
If intNum = 0 Then
strPasswd += Chr(objRandom.Next(10) + 48).ToString()
ElseIf intNum = 1 Then
strPasswd += Chr(objRandom.Next(26) + 65).ToString()
Else
strPasswd += Chr(objRandom.Next(26) + 97).ToString()
End If
Next Return strPasswd
End Function
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;using System.Drawing.Imaging;
using System.Drawing;
using System.IO;public partial class UserControls_Gif : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string tmp = RndNum(5).ToUpper();
this.Session["ImageV"] = tmp;
HttpCookie a = new HttpCookie("ImageV", tmp);
Response.Cookies.Add(a);
this.CreateCheckCodeImage(tmp); } private void ValidateCode(string VNum)
{
Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null; int gheight = VNum.Length * 15;
Img = new Bitmap(gheight, 30);
g = Graphics.FromImage(Img);
//背景颜色
g.Clear(Color.White);
//文字字体
Font f = new Font("Arial Black", 11);
//文字颜色
SolidBrush s = new SolidBrush(Color.Black);
g.DrawString(VNum, f, s, 3, 3);
ms = new MemoryStream();
Img.Save(ms, ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray()); g.Dispose();
Img.Dispose();
Response.End();
} private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" +
",q,r,s,t,u,v,w,x,y,z";
string[] VcArray = Vchar.Split(new Char[] { ',' });
string VNum = "";
int temp = -1; Random rand = new Random(); for (int i = 1; i < VcodeNum + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
} int t = rand.Next(35);
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
}
private void CreateCheckCodeImage(string checkCode)
{
if(checkCode == null || checkCode.Trim() == String.Empty)
return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 15.5)), 30);
Graphics g = Graphics.FromImage(image); try
{
//生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for(int i=0; i<25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
} Font font = new System.Drawing.Font("Arial", 14, (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.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 for(int i=0; i<100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next()));
} //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
static public string GenerateRandomString(int length)
{
string s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
string reValue = string.Empty;
Random rnd = new Random(DateTime.Now.Millisecond);
while( reValue.Length < length )
{
string s1=s[rnd.Next(0,s.Length)].ToString();
if( reValue.IndexOf(s1)==-1 ) reValue += s1;
}
return reValue;
}
string[] arr={ "0","1", "2","3","4","5","6","7","8","9", "a","b","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
Random rd=new Random();
while(str.Length<8)
{
String temp=arr[rd.Next(0,35)];
if (str.IndexOf(temp) == -1)
{
str +=temp;
}
}
Console.WriteLine(str);