이 예제는 참조에 대한 Java의 특정 코드를 무작위로 생성 된 검증 코드를 공유합니다. 특정 내용은 다음과 같습니다
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.servletecment; javax.servlet.servletoutputStream; import javax.servlet.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.httpertession.htttercate httenst httenst httense {/ *** 객체의 생성자.*/ public randimage () {super (); } private int imgwidth = 0; // 이미지 너비 비공개 int imgeight = 0; // 이미지 높이 개인 int CodeCount = 0; // 사진의 문자 수 개인 int x = 0; 개인 정보; // 글꼴 개인 int 코드의 높이; 개인 문자열 글꼴 스타일; // 글꼴 스타일 // 직렬화 ID 중복 비중의 정적 정적 최종 최종 SerialVersionUID = 128554012633034503L; /*** 초기화 구성 매개 변수*/public void init ()는 servletexception {// 너비 문자열 strwidth = "200"; // 높이 문자열 stheight = "80"; // 문자 수 문자열 strcodecount = "5"; // font fontstyle = "Times New Roman"; // 구성된 정보를 숫자로 변환 {if (strwidth! = null && strwidth.length.length.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 (numberformatexception e) {e.printstacktrace (); } x = imgwidth / (CodeCount + 1); // 캐릭터 간격 fontheight = imgheight -2; // 글꼴 높이 Codey = imgeight -12; // Code Heigh} Protected Void ProcessRequest (httpservletrequest 요청, httpservletreponse responsk)는 servletexception, ioexception {// output stame set response.setContentType ( "image/jpeg"); // 출력 형식 응답 .Setheader ( "Pragma", "No-Cache"); // 캐시 없음 응답을 재생성하지 않음 .SetHeader ( "캐시 제어", "없음"); // 캐시 없음 응답을 재생합니다 .SetDateHeader ( "Expires", 0); // 캐시 무효화도 캐시 된 httpsession session = request.getSession (); // 세션 세션 가져 오기 // 메모리에서 이미지 생성 bufferedImage image = new bufferedImage (imgwidth, imgeight, bufferedImage.type_int_rgb); // 그래픽 컨텍스트 가져 오기 Graphics2d g = image.creategraphics (); // 랜덤 random random = new random ()을 생성합니다. // 랜덤 클래스 // 사각형의 배경색을 설정합니다. // 사각형 rect를 흰색으로 채우십시오. // 테두리 글꼴 G.SetFont를 설정합니다 (새 글꼴 (FontStyle, font.pont.plain + font.italic, fontheight)); // 테두리 색상 G.SetColor를 설정합니다 (새 색상 (55, 55, 12)); // 테두리 G.DrawRect (0, 0, imgwidth -1, Imgheight -1)를 그립니다. // 160 간섭선을 무작위로 생성하여 이미지의 인증 코드를 다른 프로그램 G.SetColor (getRandColor (160, 200))에서 감지하기가 쉽지 않습니다. for (int i = 0; i <160; i ++) {int x = random.nextint (imgwidth); int y = random.nextInt (imgeight); int xl = random.nextint (12); int yl = random.nextint (12); G.DrawLine (X, Y, X + XL, Y + YL); } // 무작위로 생성 된 인증 코드 (4 자리 번호) String srand = ""; int red = 0, green = 0, blue = 0; for (int i = 0; i <codecount; i ++) {// codecount random 문자를 생성하기 위해 변경 // rgb를 통해 새로운 색상 3 색 red = random.nextint (255); green = random.nextint (255); blue = random.nextint (255); // 숫자를 얻는 스토리 0 1 2 int wordType = random.nextInt (3); // 0-2 char retword = 0 사이에 3 개의 숫자를 얻는 스토리; // 0 번호 1 소문자 편지 2 대문자 스위치 (WordType) {case 0 : retword = this.getSingLenumberChar (); // 0-9의 Char-Type 브레이크를 얻습니다. 사례 1 : retword = this.getLowerOrupPerchar (0); // 소문자 숯 유형을 끊습니다. 사례 2 : retword = this.getLowerOrupPerchar (1); // 대문자 char-type break를 얻습니다. } srand += string.valueof (retword); // 획득 한 임의 문자를 가져옵니다. // 색상을 설정합니다. // 그림에서 해당 위치에 문자를 쓰기} // 세션 세션에서 인증 코드를 저장합니다. // 획득 한 무작위 문자를 세션에 저장하면 // 이미지가 g.dispose ()를 호출 할 수 있습니다. // g 객체 servletOutStream responseputStream = response.getOutputStream ()을 해제합니다. // output stream // page imageio.write에 이미지를 출력합니다 (이미지 ","jpeg ", responseoutputstream); // JPEG 형식의 출력 // 아래 입력 스트림을 닫으십시오! responseoutputStream.flush (); // 스트림 응답을 닫고 닫습니다. } color getRandColor (int fc, int bc) {// 랜덤 색상 random = 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); 새로운 색을 반환합니다 (R, G, B); } Protected Void doget (httpservletrequest 요청, httpservletreponse 응답) servletexception, ioexception {processRequest (요청, 응답); } 보호 된 void dopost (httpservletRequest 요청, httpservletResponse 응답) servletexception, ioexception {processRequest (요청, 응답); } // 정수 랜덤 번호를 숯으로 변환하여 개인 char getsinglenumbchar () {random random = new random (); int numberresult = random.nextint (10); int ret = numberresult + 48; // 문자 '0'을 Ascall 코드로 변환 할 때 48 return (char) ret; } // get 26 문자 private char getlowerorupperchar (int poper) {random random = new random (); int numberresult = random.nextint (26); int ret = 0; if (상단 == 0) {// 소문자 ret = 숫자 result + 97; } else if (upper == 1) {// capital ret = numberresult + 65; } return (char) ret; }} 위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.