現在、多くのシステムの登録、ログイン、または情報公開モジュールには、自動登録プログラムや自動公開プログラムの使用を避けるために、ランダム コード機能が追加されています。
検証コードは実際にはいくつかの文字をランダムに選択し、ページ上に写真の形で表示します。トマトガーデンをダウンロードして送信した場合、送信された情報は無効とみなされます。自動プログラムによる画像の分析や解析を防ぐために、通常、画像上に干渉線がランダムに生成されたり、文字が歪んだりして自動認識が困難になります。
次のようにコードをコピーします。
パッケージ com.servlet;
java.awt.Colorをインポートします。
java.awt.Fontをインポートします。
java.awt.Graphics2Dをインポートします。
インポート java.awt.image.BufferedImage;
java.util.Randomをインポートします。
インポートjavax.imageio.ImageIO;
インポート javax.servlet.ServletException;
インポート javax.servlet.ServletOutputStream;
インポート javax.servlet.http.HttpServlet;
インポート javax.servlet.http.HttpServletRequest;
インポート javax.servlet.http.HttpServletResponse;
インポート javax.servlet.http.HttpSession;
/**
* ランダムな認証コードを生成します
* @著者bitiliu
*
*/
パブリック クラス ValidateCodeServlet は HttpServlet を拡張します
{
プライベート静的最終ロングシリアルバージョンUID = 1L;
//検証コード画像の幅。
プライベート int 幅 = 60;
// 認証コード画像の高さ。
プライベート int 高さ = 20;
//認証コードの文字数
プライベート int codeCount=4;
プライベート int x=0;
//フォントの高さ
プライベート int fontHeight;
プライベート int コード 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("高さ");
//文字数
文字列 strCodeCount=this.getInitParameter("codeCount");
//設定情報を数値に変換
試す
{
if (strWidth!=null && strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
if (strHeight!=null && strHeight.length()!=0)
{
高さ=Integer.parseInt(strHeight);
}
if (strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
catch(NumberFormatException e)
{}
x=幅/(コード数+1);
fontHeight=高さ-2;
コードY=高さ-4;
}
protected void サービス (HttpServletRequest 要求、HttpServletResponse 応答)
ServletException、java.io.IOExceptionをスローします{
//画像バッファを定義
BufferedImage buffImg = new BufferedImage(
幅、高さ、BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//乱数生成クラスを作成する
ランダム ランダム = new Random();
//画像を白で塗りつぶします
g.setColor(Color.WHITE);
g.fillRect(0, 0, 幅, 高さ);
//フォントを作成します。フォントのサイズは画像の高さに応じて決定する必要があります。
フォント font = new Font("Fixedsys", Font.PLAIN, fontHeight);
//フォントを設定します。
g.setFont(フォント);
//枠線を描きます。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// 画像内の認証コードが他のプログラムによって検出されにくくするために、160 本の干渉線をランダムに生成します。