요즘에는 많은 시스템의 등록, 로그인 또는 정보 게시 모듈에 자동 등록 프로그램이나 자동 게시 프로그램의 사용을 피하기 위해 임의 코드 기능이 추가되었습니다.
인증 코드는 실제로 일부 문자를 무작위로 선택하여 페이지에 그림 형식으로 표시합니다. 토마토 정원을 다운로드하여 제출하면 제출된 정보가 잘못된 것으로 간주됩니다. 자동 프로그램이 사진을 분석하고 분석하는 것을 방지하기 위해 일반적으로 사진에 일부 간섭선이 무작위로 생성되거나 문자가 왜곡되어 자동 인식이 더 어려워집니다.
다음과 같이 코드 코드를 복사합니다 .
패키지 com.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
javax.imageio.ImageIO 가져오기;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 무작위 인증코드 생성
* @author 비트리우
*
*/
공개 클래스 ValidateCodeServlet은 HttpServlet을 확장합니다.
{
개인 정적 최종 긴 serialVersionUID = 1L;
//인증코드 이미지의 너비입니다.
개인 정수 너비=60;
//인증코드 이미지의 높이입니다.
개인 정수 높이=20;
//인증 코드의 문자 수
개인 int codeCount=4;
개인 정수 x=0;
//글꼴 높이
개인 정수 글꼴 높이;
개인 정수 코드Y;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W ',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9 ' };
/**
* 이미지 속성 초기화 및 확인
*/
public void init()에서 ServletException이 발생합니다.
{
//web.xml에서 초기 정보 가져오기
//너비
String strWidth=this.getInitParameter("너비");
//높은
String strHeight=this.getInitParameter("높이");
//문자수
String strCodeCount=this.getInitParameter("codeCount");
//구성된 정보를 수치값으로 변환
노력하다
{
if (strWidth!=null && strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
if (strHeight!=null && strHeight.length()!=0)
{
height=Integer.parseInt(strHeight);
}
if (strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
catch(NumberFormatException e)
{}
x=너비/(코드카운트+1);
글꼴 높이=높이-2;
codeY=높이-4;
}
보호된 무효 서비스(HttpServletRequest req, HttpServletResponse resp)
ServletException, java.io.IOException이 발생합니다.
//이미지 버퍼 정의
BufferedImage buffImg = 새로운 BufferedImage(
너비, 높이,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//난수 생성기 클래스 생성
무작위 무작위 = 새로운 무작위();
//이미지를 흰색으로 채운다
g.setColor(Color.WHITE);
g.fillRect(0, 0, 너비, 높이);
//글꼴을 생성합니다. 글꼴의 크기는 이미지의 높이에 따라 결정되어야 합니다.
글꼴 글꼴 = new Font("Fixedsys", Font.PLAIN, FontHeight);
//폰트를 설정합니다.
g.setFont(글꼴);
//테두리를 그립니다.
g.setColor(Color.BLACK);
g.drawRect(0, 0, 너비 - 1, 높이 - 1);
// 이미지 속 인증코드를 다른 프로그램에서 감지하기 어렵게 하기 위해 무작위로 160개의 간섭선을 생성합니다.