關于java圖片驗證碼的文章最近更新了不少,幫助大家掌握java驗證碼的生成技術,下文為大家分享了java生成圖片驗證碼最簡單的方法,供大家參考。
現在各行業在定制系統時都會考慮到機器注冊,現在最有效的方式就是輸入驗證。現在的驗證方式有很多種:
一、問題驗證,其實也是圖片驗證,在圖片上生成問題,然后輸入框輸入答案。
二、圖片驗證,輸入圖片上展示的文字信息。
三、短信驗證,比較繁雜,用戶也不怎么喜歡。
四、還有就是百度最新的驗證方式。圖片上生成文字,然后出現一個文字點擊框,選擇你在驗證圖片上看到的文字。
現在就分享一下java生成驗證碼的代碼,這是一個基礎的代碼。可以直接在學習中使用,如果需要較為復雜的驗證可自己添加邏輯驗證。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
@Controller public class ImgVerifyCode extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; /** * 驗證碼圖片的寬度。 */ private int width = 70 ; /** * 驗證碼圖片的高度。 */ private int height = 30 ; /** * 驗證碼字符個數 */ private int codeCount = 5 ; /** * xx */ private int xx = 0 ; /** * 字體高度 */ private int fontHeight; /** * codeY */ private int codeY; /** * codeSequence */ String[] codeSequence = { "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "A" , "a" , "B" , "b" , "c" , "C" , "D" , "d" , "E" , "e" , "F" , "f" , "G" , "g" , "z" , "X" , "Q" , "v" }; /** * 初始化驗證圖片屬性 */ public void init() throws ServletException { // 從web.xml中獲取初始信息 // 寬度 String strWidth =width+ "" ; // 高度 String strHeight = height+ "" ; // 字符個數 String strCodeCount = codeCount+ "" ; // 將配置的信息轉換成數值 try { 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) { e.printStackTrace(); } xx = width / (codeCount + 2 ); //生成隨機數的水平距離 fontHeight = height - 12 ; //生成隨機數的數字高度 codeY = height - 8 ; //生成隨機數的垂直距離 } protected String images(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { init(); // 定義圖像buffer BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D gd = buffImg.createGraphics(); // 創建一個隨機數生成器類 Random random = new Random(); // 將圖像填充為白色 gd.setColor(Color.WHITE); gd.fillRect( 0 , 0 , width, height); // 創建字體,字體的大小應該根據圖片的高度來定。 Font font = new Font( "Fixedsys" , Font.PLAIN, fontHeight); // 設置字體。 gd.setFont(font); // 畫邊框。 gd.setColor(Color.BLACK); gd.drawRect( 0 , 0 , width - 1 , height - 1 ); // 隨機產生4條干擾線,使圖象中的認證碼不易被其它程序探測到。 gd.setColor(Color.BLACK); for ( int i = 0 ; i < 4 ; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt( 12 ); int yl = random.nextInt( 12 ); gd.drawLine(x, y, x + xl, y + yl); } // randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。 StringBuffer randomCode = new StringBuffer(); int red = 0 , green = 0 , blue = 0 ; // 隨機產生codeCount數字的驗證碼。 for ( int i = 0 ; i < codeCount; i++) { // 得到隨機產生的驗證碼數字。 String strRand = String.valueOf(codeSequence[random.nextInt( 27 )]); // 產生隨機的顏色分量來構造顏色值,這樣輸出的每位數字的顏色值都將不同。 red = random.nextInt( 125 ); green = random.nextInt( 255 ); blue = random.nextInt( 200 ); // 用隨機產生的顏色將驗證碼繪制到圖像中。 gd.setColor( new Color(red, green, blue)); gd.drawString(strRand, (i + 1 ) * xx, codeY); // 將產生的四個隨機數組合在一起。 randomCode.append(strRand); } // 將四位數字的驗證碼保存到Session中。 HttpSession session = req.getSession(); session.setAttribute( "validateCode" , randomCode.toString()); // 禁止圖像緩存。 resp.setHeader( "Pragma" , "no-cache" ); resp.setHeader( "Cache-Control" , "no-cache" ); resp.setDateHeader( "Expires" , 0 ); resp.setContentType( "image/jpeg" ); // 將圖像輸出到Servlet輸出流中。 ServletOutputStream sos = resp.getOutputStream(); ImageIO.write(buffImg, "jpeg" , sos); sos.close(); return null ; } } |
這個代碼就是生成驗證圖片的基礎方法。
以上就是本文的全部內容,希望對大家的學習有所幫助,大家也可以查看之前的文章進行深入學習。