Cuando diseñamos el módulo de inicio de sesión del usuario, a menudo usamos códigos de verificación, que pueden prevenir eficazmente el descifrado malicioso por parte del software de piratas informáticos. Ahora revelaré el código fuente de mis códigos de verificación de uso común.
Cómo utilizar:
1. Agregue una clase al proyecto web, como "CreateImage.cs", y luego copie el código fuente que publiqué en él;
2. Cree un nuevo formulario web, como "Image.aspx", y agregue el código "CreateImage.DrawImage ();" a Page_Load. ¡Por supuesto, no olvide agregar una referencia a la clase! !
3. Agregue el siguiente código javascript a la posición apropiada de la página (donde desea colocar el código de verificación) y estará bien.
El código fuente es el siguiente:
///
///Módulo de código de verificación///
clase pública CreateImage
{
DrawImage vacío estático público ()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
///
/// Generar imagen de verificación ///
/// Verificar caracteres private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
Imagen System.Drawing.Bitmap = nueva System.Drawing.Bitmap(iwidth, 23);
Gráficos g = Graphics.FromImage(imagen);
g.Claro(Color.Blanco);
//Definir color Color[] c = {Color.Negro,Color.Rojo,Color.Azul Oscuro,Color.Verde,Color.Naranja,Color.Marrón,Color.Cian Oscuro,Color.Púrpura};
//Definir cadena de fuente[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Rand aleatorio = nuevo Aleatorio();
// Salida aleatoria de puntos de ruido para (int i=0;i<50;i++)
{
int x = rand.Siguiente(imagen.Ancho);
int y = rand.Siguiente(imagen.Altura);
g.DrawRectangle(new Pen(Color.LightGray, 0),x,y,1,1);
}
//Enviar caracteres del código de verificación en diferentes fuentes y colores for(int i=0;i
{
int cindex = rand.Siguiente(7);
int findex = rand.Siguiente(5);
Fuente f = nuevo System.Drawing.Font(fuente[findex], 10, System.Drawing.FontStyle.Bold);
Pincel b = nuevo System.Drawing.SolidBrush(c[cindex]);
intii=4;
si((i+1)%2==0)
{
ii=2;
}
g.DrawString(checkCode.Substring(i,1), f, b, 3+(i*12), ii);
}
//Dibuja un borde g.DrawRectangle(new Pen(Color.Black,0),0,0,image.Width-1,image.Height-1);
//Salida al navegador System.IO.MemoryStream ms = new System.IO.MemoryStream();
imagen.Guardar(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Respuesta.ClearContent();
HttpContext.Current.Response.ContentType = "imagen/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
imagen.Dispose();
}
///
/// Generar letras aleatorias ///
/// Número de letras generadas /// cadena
cadena privada RndNum (int VcodeNum)
{
cadena Vchar = "0,1,2,3,4,5,6,7,8,9";
cadena[] VcArray = Vchar.Split(',') ;
string VNum = "" ; // Dado que la cadena es muy corta, StringBuilder no es necesario int temp = -1 // Registra el último valor aleatorio y trata de evitar producir varios números aleatorios idénticos // Usa un algoritmo simple para asegurar Generar diferentes números aleatorios Random rand =new Random();
para (int i = 1; i < VcodeNum+1; i++)
{
si (temperatura! = -1)
{
rand =new Aleatorio(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length);
si (temperatura! = -1 && temperatura == t)
{
devolver RndNum(VcodeNum);
}
temperatura = t;
VNum += VcArray[t];
}
devolver número V;
}