Este ejemplo comparte el código específico de Java Código de verificación generado aleatoriamente para su referencia. El contenido específico es el siguiente
import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image.bufferedImage; import java.io.ioexception; import java.util.random; import javax.imageio.iMageio; import javax.servlet.servletexception; importar; import javax.servlet.servletOutputStream; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; {/ *** Constructor del objeto.*/ Public randimage () {super (); } private int imgwidth = 0; // Ancho de imagen Private int ImghEight = 0; // Altura de imagen Private int codecount = 0; // El número de caracteres en la imagen private int x = 0; privado int fontheight; // La altura de la fuente privada int por codey; Fuente de cadena privada; // Estilo de fuente // ID de serialización Evite duplicado la estática privada final Long SerialVersionUid = 128554012633034503l; /*** Parámetros de configuración de inicialización*/public void init () arroja servletException {// width string strwidth = "200"; // String de altura strheight = "80"; // Número de caracteres String StrCodeCount = "5"; // font fontstyle = "Times New Roman"; // Convierta la información configurada en una prueba numérica {if (strwidth! = Null && strwidth.length ()! = 0) {imgwidth = integer.parseInt (strwidth); } if (strheight! = null && strheight.length ()! = 0) {imgheight = integer.parseInt (strheight); } if (strcodeCount! = null && strcodeCount.length ()! = 0) {codeCount = integer.parseInt (strcodeCount); }} Catch (NumberFormateException e) {E.PrintStackTrace (); } x = imgwidth / (codecount + 1); // Espacio de caracteres Fontheight = ImghEight - 2; // Codey de altura de fuente = ImghEight - 12; // Código de altura} ProcessRequest void protegido (HTTPServletRequest Solicitud, respuesta httpServletResponse) arroja servletException, ioException {// salida set de respuesta.setContentType ("Image/jpeg"); // Respuesta de formato de salida. // sin caché regenerar respuesta.setheader ("caché-control", "no-cache"); // sin caché regenerar respuesta.setDateHeader ("expiras", 0); // No hay invalidación de caché tampoco se almacena en caché httpsession session = request.getSession (); // Obtener sesión Session // Crear imagen en la memoria BufferedImage Image = new BufferedImage (imgwidth, imgheight, bufferedImage.type_int_rgb); // Obtener el contexto gráfico Graphics2d g = image.createGraphics (); // generar aleatorios aleatorios = new Random (); // Clase aleatoria // Establecer el color de fondo del rectángulo G.SetColor (color.white); // llena el rectángulo rect a blanco g.fillrect (0, 0, imgwidth, imghEight); // Establecer la fuente de borde G.SetFont (nueva Font (FontStyle, Font.Plain + Font.italic, Fontheight)); // establecer el color del borde G.SetColor (nuevo color (55, 55, 12)); // Dibuja el borde g.drawrect (0, 0, imgwidth - 1, imgheight - 1); // Generar aleatoriamente 160 líneas de interferencia, lo que hace que el código de autenticación en la imagen no sea fácil de detectar por otros programas G.SetColor (GetRandColor (160, 200)); para (int i = 0; i <160; i ++) {int x = random.nextint (imgwidth); int y = random.nextint (imgheight); int xl = random.nextint (12); int yl = random.nextint (12); G.Drawline (x, y, x + xl, y + yl); } // Tome el código de autenticación generado aleatoriamente (número de 4 dígitos) String srand = ""; int rojo = 0, verde = 0, azul = 0; for (int i = 0; i <codeCount; i ++) {// Cambiar para generar caracteres aleatorios de Codecount // historias el nuevo color a través de RGB tres colores rojo = random.nextint (255); verde = Random.NextInt (255); Blue = Random.NextInt (255); // historias para obtener una cantidad de 0 1 2 int wordtype = random.nextint (3); // historias para obtener 3 números entre 0-2 char retword = 0; // 0 Número 1 Interruptor de letra mayúscula 2 (WordType) {Case 0: RetWord = this.getSingLenumberChar (); // Obtenga el descanso de tipo char-de 0-9; Caso 1: RetWord = this.getLowerRipperchar (0); // Obtenga el descanso en minúsculas de tipo char; Caso 2: RetWord = this.getLowerRupperChar (1); // Obtener el descanso de tipo de char-mayúsculas; } srand += string.ValueOf (retword); // Obtener los caracteres aleatorios obtenidos G.SetColor (nuevo color (rojo, verde, azul)); // Establecer un color G.DrawString (String.ValueOf (Retword), 2+ (i) * x, Codey); // Escribe los caracteres en la posición correspondiente en la imagen} // Guardar el código de autenticación en la sesión Session.SetAttribute ("rand", srand); // Guardar los caracteres aleatorios obtenidos en la respuesta de la sesión, y puede llamar // la imagen en efecto g.dispose (); // libera el objeto G ServLetOutputStream ResponseOutputStream = Response.getOutputStream (); // Salida de transmisión // Imagen de salida a la página ImageIO.Write (Image, "JPEG", ResponseOutputStream); // Salida en formato JPEG // ¡Cierre el flujo de entrada a continuación! ResponseOutputStream.Flush (); // fresca y cierre el flujo RespuestaOutputStream.Close (); } Color getRandColor (int fc, int bc) {// dar un color aleatorio aleator = new Random (); if (fc> 255) fc = 255; if (BC> 255) BC = 255; int r = fc + random.nextint (bc - fc); int g = fc + random.nextint (BC - fc); int b = fc + random.nextint (bc - fc); devolver nuevo color (R, G, B); } protegido void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioException {ProcessRequest (solicitud, respuesta); } protegido void dopost (solicitud httpservletRequest, httpservletreponse respuesta) lanza ServletException, ioexception {ProcessRequest (solicitud, respuesta); } // Convertir un número aleatorio entero a char para devolver el char getsinglenumberchar () {random random = new Random (); int numberResult = Random.NextInt (10); int ret = numberResult + 48; // Al convertir el carácter '0' en código ascalado, es 48 return (char) ret; } // Obtener 26 caracteres Char private getLowerRupperChar (int Upper) {Random Random = new Random (); int numberResult = Random.NextInt (26); int ret = 0; if (superior == 0) {// minúscula ret = numberResult + 97; } else if (superior == 1) {// capital ret = numberResult + 65; } return (char) ret; }} Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.