日韩性视频-久久久蜜桃-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生成数字验证码的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 偷偷操不一样 | 视频在线观看视频 | 亚洲精品乱码久久久久久久 | 欧美日韩亚洲国产综合 | 日本猛少妇色xxxxx | 精品视频免费播放 | 日人视频| 免费污视频 | 日韩欧美综合一区 | 亚洲高清影院 | 亚洲免费人成 | 中文字幕xxxx | 捆绑无遮挡打光屁股 | 亚洲免费视频播放 | 亚洲影视精品 | 国产午夜视频 | 免费裸体视频女性 | 色先锋影院 | 在线观看日韩av | 婷婷激情电影 | 欧美视频一区 | 国产精品国产三级国产普通话蜜臀 | 欧美日韩一区不卡 | 日日操夜夜草 | 国产在线a视频 | 一级片在线免费 | 国产精品三级视频 | 国产九一精品 | 国产成人h | 91成人网页 | 九色激情网 | 青青射| 国产精品麻豆一区二区 | 中文字幕无线码一区 | 夜夜福利 | 免费一级特黄特色毛片久久看 | 免费观看成人av | 羞羞答答一区 | 韩国美女啪啪 | 中文字幕亚洲成人 | 夫の上司に犯波多野结衣853 | jlzzjlzz亚洲女人18 | 国产xxxxx在线观看 | 午夜三区 | 锦绣未央在线观看 | 精品视频在线看 | 久久男人精品 | 日本中文在线播放 | 中文字幕天堂av | 香蕉视频911 | 手机在线亚洲 | 国产三级精品三级在线观看 | 永久av免费在线观看 | 可以免费看av的网址 | 亚洲乱码国产乱码精品精软件 | 超碰av在线 | 亚欧精品在线 | 国产玖玖| 色偷偷av男人的天堂 | 亚洲无在线观看 | 日韩裸体视频 | 蜜桃精品一区二区 | 国产人成免费视频 | 国产又好看的毛片 | 第一页在线| 国产伦乱 | av在线色 | 亚洲精品国产一区二 | 男人疯狂高潮呻吟视频 | 欧美三级在线观看视频 | 人人草人人射 | 久久久久久久伊人 | 久草成人在线视频 | a级网站在线观看 | 久色网| 午夜免费观看视频 | 最近中文字幕在线免费观看 | 波多野结衣视频免费 | 一区国产精品 | 国产亚洲三级 | 女同亚洲精品一区二区三 | 农村寡妇一区二区三区 | 九九视频这里只有精品 | av成人在线看| 好吊妞视频这里只有精品 | 日本免费黄色小视频 | 美女免费黄色 | 超碰成人免费 | 婷婷亚洲五月 | 超碰网站在线 | 日韩成人片 | 天堂av2019 | 熟女性饥渴一区二区三区 | 欧美色图五月天 | 午夜影视网 | 蜜桃综合网 | 国产日韩欧美一二三区 | 91精品中文字幕 | 久久av红桃一区二区小说 |