우리는 사용자 로그인 모듈을 설계할 때 종종 인증코드를 사용하는데, 이는 해커 소프트웨어에 의한 악의적인 크래킹을 효과적으로 방지할 수 있습니다. 이제 제가 자주 사용하는 인증코드의 소스코드를 공개하겠습니다.
사용 방법:
1. 웹 프로젝트에 "CreateImage.cs"와 같은 클래스를 추가한 다음 게시한 소스 코드를 복사합니다.
2. "Image.aspx"와 같은 새 웹 양식을 만들고 "CreateImage.DrawImage ();" 코드를 Page_Load에 추가합니다. 물론 클래스에 대한 참조를 추가하는 것도 잊지 마세요. !
3. 페이지 내 적절한 위치(인증코드를 넣으려는 곳)에 다음 자바스크립트 코드를 추가하면 OK입니다.
소스 코드는 다음과 같습니다.
///
///인증코드 모듈///
공개 클래스 CreateImage
{
공개 정적 무효 DrawImage()
{
CreateImage img=새 CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// 검증 이미지 생성 ///
/// 문자 확인 private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.드로잉.Bitmap 이미지 = new System.드로잉.Bitmap(iwidth, 23);
그래픽 g = Graphics.FromImage(이미지);
g.Clear(색상.흰색);
//색상 정의 Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//글꼴 정의 string[] 글꼴 = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
무작위 랜드 = 새로운 무작위();
//(int i=0;i<50;i++)에 대해 무작위로 노이즈 포인트를 출력합니다.
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}
//인증코드 문자를 다양한 글꼴과 색상으로 출력합니다. for(int i=0;i
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
글꼴 f = new System.드로잉.Font(font[findex], 10, System.드로잉.FontStyle.Bold);
브러시 b = new System.드로잉.SolidBrush(c[cindex]);
정수 ii=4;
if((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//테두리 그리기 g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
//브라우저에 출력 System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.드로잉.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//응답.ClearContent();
HttpContext.Current.Response.ContentType = "이미지/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
///
/// 임의의 문자 생성 ///
/// 생성된 문자 수 /// 문자열
개인 문자열 RndNum(int VcodeNum)
{
문자열 Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // 문자열이 매우 짧기 때문에 StringBuilder가 필요하지 않습니다. int temp = -1 ; // 마지막 난수 값을 기록하고 여러 개의 동일한 난수 생성을 방지합니다. // 생성을 보장하기 위해 간단한 알고리즘을 사용합니다. 다른 난수 Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if (임시 != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length );
if (온도 != -1 && 온도 == t)
{
RndNum(VcodeNum)을 반환합니다.
}
온도 = t;
VNum += VcArray[t];
}
VNum을 반환합니다.
}