日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转:使用java生成数字验证码

發布時間:2024/8/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:使用java生成数字验证码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文轉載自:http://747017186.iteye.com/blog/2275867

?

轉載內容:

1、驗證碼生成的基礎類

package com.hljw.health.plat.action.portalpage; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.util.Random; /** * 驗證碼圖片生成器 * * @author huangjunhua * */ public class IdentifyingCode { /** * 驗證碼圖片的寬度。 */ private int width = 80; /** * 驗證碼圖片的高度。 */ private int height = 40; /** * 驗證碼的數量。 */ private Random random = new Random(); public IdentifyingCode(){} /** * 生成隨機顏色 * @param fc 前景色 * @param bc 背景色 * @return Color對象,此Color對象是RGB形式的。 */ public Color getRandomColor(int fc, int bc) { if (fc > 255) fc = 200; 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); return new Color(r, g, b); } /** * 繪制干擾線 * @param g Graphics2D對象,用來繪制圖像 * @param nums 干擾線的條數 */ public void drawRandomLines(Graphics2D g ,int nums ){ g.setColor(this.getRandomColor(160, 200)) ; for(int i=0 ; i<nums ; i++){ int x1 = random.nextInt(width) ; int y1 = random.nextInt(height); int x2 = random.nextInt(12) ; int y2 = random.nextInt(12) ; g.drawLine(x1, y1, x2, y2) ; } } /** * 獲取隨機字符串, * 此函數可以產生由大小寫字母,漢字,數字組成的字符串 * @param length 隨機字符串的長度 * @return 隨機字符串 */ public String drawRandomString(int length , Graphics2D g){ StringBuffer strbuf = new StringBuffer() ; String temp = "" ; int itmp = 0 ; for(int i=0 ; i<length ; i++){ switch(random.nextInt(5)){ case 1: //生成A~Z的字母 itmp = random.nextInt(26) + 65 ; temp = String.valueOf((char)itmp); break; case 2: //生成數字itmp = random.nextInt(26) + 97 ; temp = String.valueOf((char)itmp); // case 3: //生成漢字 // String[] rBase = {"0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , // "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" }; // int r1 = random.nextInt(3)+11 ; //生成第1位的區碼 // String strR1 = rBase[r1] ; //生成11~14的隨機數 // int r2 ; //生成第2位的區碼 // if(r1 == 13) // r2 = random.nextInt(7) ; //生成0~7的隨機數 // else // r2 = random.nextInt(16) ; //生成0~16的隨機數 // String strR2 = rBase[r2] ; // int r3 = random.nextInt(6) + 10 ; //生成第1位的位碼 // String strR3 = rBase[r3] ; // int r4 ; //生成第2位的位碼 // if(r3 == 10) // r4 = random.nextInt(15) + 1; //生成1~16的隨機數 // else if(r3 == 15) // r4 = random.nextInt(15) ; //生成0~15的隨機數 // else // r4 = random.nextInt(16) ; //生成0~16的隨機數 // String strR4 = rBase[r4] ; // //將生成的機內碼轉換成數字 // byte[] bytes = new byte[2] ; // String strR12 = strR1 + strR2 ; //將生成的區碼保存到字節數組的第1個元素中 // int tempLow = Integer.parseInt(strR12, 16) ; // bytes[0] = (byte)tempLow; // String strR34 = strR3 + strR4 ; //將生成的區碼保存到字節數組的第2個元素中 // int tempHigh = Integer.parseInt(strR34, 16) ; // bytes[1] = (byte)tempHigh; // temp = new String(bytes); //根據字節數組生成漢字 // break; default: itmp = random.nextInt(10) + 48 ; temp = String.valueOf((char)itmp) ; break; } Color color = new Color(20+random.nextInt(20) , 20+random.nextInt(20) ,20+random.nextInt(20) ); g.setColor(color) ; //想文字旋轉一定的角度 AffineTransform trans = new AffineTransform(); trans.rotate(random.nextInt(45)*3.14/180, 15*i+8, 7) ; //縮放文字 float scaleSize = random.nextFloat() + 0.8f ; if(scaleSize>1f) scaleSize = 1f ; trans.scale(scaleSize, scaleSize) ; g.setTransform(trans) ; g.drawString(temp, 15*i+18, 30) ;//字體出現的坐標 strbuf.append(temp) ; } g.dispose() ; return strbuf.toString() ; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } }

2、 專門負責在頁面請求生成驗證碼圖片的servlet

package com.hljw.health.plat.action.portalpage; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class PictureCheckCode extends HttpServlet { public PictureCheckCode() { super(); } public void init() throws ServletException { super.init() ; } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response) ; } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //設置不緩存圖片 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "No-cache"); response.setDateHeader("Expires", 0) ; //指定生成的相應圖片 response.setContentType("image/jpeg") ; IdentifyingCode idCode = new IdentifyingCode(); BufferedImage image =new BufferedImage(idCode.getWidth() , idCode.getHeight() , BufferedImage.TYPE_INT_BGR) ; Graphics2D g = image.createGraphics() ; //定義字體樣式 Font myFont = new Font("黑體" , Font.BOLD , 25) ; //設置字體 g.setFont(myFont) ; g.setColor(idCode.getRandomColor(200 , 250)) ; //繪制背景 g.fillRect(0, 0, idCode.getWidth() , idCode.getHeight()) ; g.setColor(idCode.getRandomColor(180, 200)) ; idCode.drawRandomLines(g, 160) ; String verifyCode=idCode.drawRandomString(4, g) ; System.out.println("**************"+verifyCode);request.getSession().setAttribute("verifyCode", verifyCode);//把驗證碼保存到session當中g.dispose() ; ImageIO.write(image, "JPEG", response.getOutputStream()) ; } }

3、web.xml文件的配置

<!-- 圖像驗證碼的servlet --> <servlet> <servlet-name>PictureCheckCode</servlet-name> <servlet-class>com.hljw.health.plat.action.portalpage.PictureCheckCode</servlet-class> </servlet> <servlet-mapping> <servlet-name>PictureCheckCode</servlet-name> <url-pattern>/PictureCheckCode.action</url-pattern> </servlet-mapping>

4、JSP頁面請求

頁面結構:

<input type="text" name="identifyingCode" id="identifyingCode"/> <img width="80" height="40" border="0" id="JS_captcha" οnclick="reflushVerify();"/>

JS:

$(function(){ reflushVerify();//加載驗證碼 });//刷新驗證碼 function reflushVerify(){var imgsrc="PictureCheckCode?random="+Math.random();//驗證碼加上隨機刷新可以得到不同的驗證碼,如果不加則驗證碼不會變化,這一點非常重要,實現局部刷新$("#JS_captcha").attr("src",imgsrc); }

總結

以上是生活随笔為你收集整理的转:使用java生成数字验证码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产三级av片| 国产精品无码成人网站视频 | 天天操中文字幕 | 久久久亚洲 | 又粗又猛又爽又黄少妇视频网站 | 午夜伦理视频 | 国产伦精品一区二区三区视频免费 | 韩国伦理片在线看 | 久久国产精品99久久人人澡 | 久久国产精品一区二区 | 一级黄色a | 女人脱了内裤趴开腿让男躁 | 欧美一级片免费在线观看 | 亚洲av综合色区无码二区爱av | 色综合狠狠爱 | 91在线一区二区三区 | 日韩一级在线视频 | 最新激情网 | 国产真实的和子乱拍在线观看 | 爆操老女人 | 久久aⅴ国产欧美74aaa | 国产欧美视频一区二区三区 | 人人狠狠| 动漫3d精品一区二区三区乱码 | 爱情岛成人 | 欧美日韩国产a | 污站在线观看 | 欧美日韩国产精品成人 | 亚洲综合激情五月久久 | 一级黄色淫片 | 亚洲精品色午夜无码专区日韩 | 免费毛片一区二区三区 | javxxx| 中文字幕在线看片 | 久久网页 | 国产精品20p| 让人下面流水的视频 | 精品少妇人妻av免费久久洗澡 | 男男成人高潮片免费网站 | 波多野吉衣中文字幕 | 日韩夜夜高潮夜夜爽无码 | 婷婷综合视频 | 亚洲欧洲日本在线 | caopeng在线| 中文字幕欧美一区 | 99re国产精品 | 国产精品第一国产精品 | 综合色站导航 | 亚洲av无一区二区三区怡春院 | 亚洲天堂成人av | 国产男女猛烈无遮挡 | 免费看国产精品 | 亚洲一区二区在线观看视频 | 黄色一级免费大片 | 精品免费在线 | 亚洲av乱码久久精品蜜桃 | 美女少妇毛片 | 国产超级av | 人妻丰满熟妇aⅴ无码 | 国产老女人乱淫免费可以 | 久久五月天综合 | 欧美成人精品激情在线视频 | 999这里只有精品 | 国产视频一区二区三区在线观看 | 久热只有精品 | 色就是欧美 | 四级毛片| 久久久久久亚洲av毛片大全 | 国产91精品露脸国语对白 | 午夜影院免费在线观看 | 成人在线免费看视频 | 欧美激情性做爰免费视频 | 无码一区二区 | 超污视频在线观看 | 欧美gv在线 | 啪啪网站免费看 | 在线观看精品视频 | 最近中文字幕在线观看 | 成人在线观看一区二区 | 无套内谢大学处破女www小说 | 伊人成人在线观看 | 黄色三级视频网站 | 嫩草嫩草嫩草嫩草嫩草嫩草 | 少妇高潮网站 | 永久免费在线视频 | 春意影院福利社 | 日韩黄色大全 | 91丝袜一区在线观看 | 亚洲欧美激情在线观看 | 国产网址在线观看 | avtt在线观看 | 色在线视频观看 | 九一国产在线观看 | 久久久香蕉网 | 最新极品jizzhd欧美 | 欧美激情va永久在线播放 | 天天射日日操 | 爱爱一区二区三区 | 国语对白清晰刺激对白 |