Este exemplo compartilha o código específico do código de verificação gerado aleatoriamente Java para sua referência. O conteúdo específico é o seguinte
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;import javax.servlet.servletOutputStream; importar javax.servlet.http.httpServlet; importar javax.servlet.http.httpServletRequest; import javax.servlet.http.htttpsletpsonse; {/ *** construtor do objeto.*/ Public RandImage () {super (); } private int imgwidth = 0; // largura de imagem private int imgheight = 0; // Altura da imagem private int codecount = 0; // o número de caracteres na imagem private int x = 0; Private int fotheight; // a altura da fonte privada int codey; String private FontStyle; // estilo de fonte // serialização ID Evite duplicar estática privada final serialversionuid = 128554012633034503L; /*** Parâmetros de configuração de inicialização*/public void init () lança servletexception {// width string strwidth = "200"; // altura string strheight = "80"; // número de caracteres string strcodecount = "5"; // font fontstyle = "Times New Roman"; // converte as informações configuradas em uma tentativa numérica {if (strwidth! = Null && strwidth.length ()! } if (fort! } if (strCodecount! = null && strcodecount.length ()! = 0) {codecount = Integer.parseint (strCodecount); }} catch (númeroFormatexception e) {e.printStackTrace (); } x = imgwidth / (codecount + 1); // Espaçamento de personagens FONTHEIGHT = IMGHEIXO - 2; // fontes altura codey = imgheight - 12; // altura do código} Protected Void Processrequest (solicitação httpServLeTrequest, httpServletResponse) lança servletexception, ioexception {// de saída de fluxo de saída Response.setContentType ("imagem/jpeg"); // Saída do formato de resposta.setheader ("Pragma", "sem cache"); // sem cache regenera a resposta.setheader ("Controle de cache", "sem cache"); // sem cache regenera Response.SetDateHeader ("Expira", 0); // nenhuma invalidação de cache também não é session httpsession de cache = request.getSession (); // obtenha sessão de sessão // Crie imagem na imagem bufferImage imagem = new bufferiMage (imgwidth, imgheight, bufferImage.type_int_rgb); // obtenha o contexto gráfico Graphics2d g = image.creategraphics (); // gerar aleatório aleatório = novo aleatório (); // Classe aleatória // Defina a cor de fundo do retângulo G.setColor (color.white); // preencha o retângulo Rect em G.FillRect (0, 0, imgwidth, imgheight); // Defina a fonte de borda G.SetFont (nova fonte (FontStyle, font.plain + font.italic, Fontheight)); // Defina a cor da borda G.SetColor (nova cor (55, 55, 12)); // desenhe a borda G.Drawrect (0, 0, imgwidth - 1, imgheight - 1); // gerar aleatoriamente 160 linhas de interferência, tornando o código de autenticação na imagem não fácil de ser detectado por outros programas G.SetColor (GetRandcolor (160, 200)); for (int i = 0; i <160; i ++) {int x = aleatom.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); } // Pegue o código de autenticação gerado aleatoriamente (número de 4 dígitos) string srand = ""; int vermelho = 0, verde = 0, azul = 0; for (int i = 0; i <codecwount; i ++) {// altere para gerar caracteres aleatórios do codecount // histórias da nova cor através de RGB três cores vermelhas = aleatória.nextint (255); verde = random.nextint (255); azul = random.nextint (255); // Histórias para obter um número de 0 1 2 int wordType = aleatom.nextint (3); // histórias para obter 3 números entre 0-2 char retword = 0; // 0 Número 1 letra minúscula 2 Letra da letra de capital (wordType) {case 0: retword = this.getSingleNumberchar (); // Obtenha o intervalo do tipo char de 0-9; Caso 1: Retword = this.getLowerorupperchar (0); // Obtenha o intervalo do tipo de char minúsculas; Caso 2: Retword = this.getLowerorupperchar (1); // Obtenha o intervalo do tipo char de char; } srand += string.valueof (retword); // Obtenha os caracteres aleatórios obtidos G.SetColor (nova cor (vermelha, verde, azul)); // Defina uma cor G.DrawString (String.ValueOf (Retword), 2+ (i) * X, Codey); // Escreva os caracteres para a posição correspondente na imagem} // Salvar o código de autenticação na sessão session.setAttribute ("rand", srand); // salve os caracteres aleatórios obtidos na resposta da sessão e você pode ligar // a imagem entra em vigor por G.Dispose (); // libere o objeto G servletOutputStream ResponstUpTStream = Response.getOutputStream (); // Fluxo de saída // Imagem de saída para a página Imageio.Write (Image, "JPEG", ResponseOutputStream); // Saída no formato jpeg // Feche o fluxo de entrada abaixo! ResponseOutputStream.flush (); // fresco e feche o fluxo ResponstUpTStream.close (); } Color getRandcolor (int fc, int bc) {// dê uma cor aleatória aleatória = novo aleatório (); if (fc> 255) fc = 255; if (bc> 255) bc = 255; int r = fc + aleatoriamente.nextInt (bc - fc); int g = fc + aleatoriamente.nextInt (bc - fc); int b = fc + aleatoriamente.nextInt (bc - fc); retornar nova cor (R, G, B); } Void protegido Doget (solicitação httpServletRequest, resposta httpServletResponse) lança servleTexception, ioexception {Processrequest (solicitação, resposta); } Void protegido DoPost (solicitação httpServletRequest, resposta httpServletResponse) lança servletexception, ioexception {processrequest (request, resposta); } // Converta um número aleatório inteiro em char para retornar char privado getingleNumberchar () {aleatório aleatório = new Random (); int numberResult = Random.NextInt (10); int ret = numberResult + 48; // Ao converter o caractere '0' para o código Ascall, é 48 retornar (char) ret; } // Obtenha 26 caracteres privados char getLowerorupperchar (int superior) {aleatório aleatório = novo aleatório (); int numberResult = Random.NextInt (26); int ret = 0; if (superior == 0) {// minúsculo ret = númeroResult + 97; } else if (Upper == 1) {// capital ret = númeroResult + 65; } retornar (char) ret; }} O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.