验证码识别技术
如題,本人在做一個關于驗證碼識別的程序。要求識別的是隨機英文字母+隨機數字+隨機顏色+隨機位置+隨機長度。 有高手來幫幫忙哦。若是有最基礎的隨機數字+隨機大寫英文字母的四位驗證碼識別的程序, ? 最佳答案 public void service(HttpServletRequest req, HttpServletResponse res)throws IOException{
// 驗證碼圖片的寬度。int width = 70;//驗證碼圖片的高度。int height=36;BufferedImage buffImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2D g=buffImg.createGraphics();//創建一個隨機數生成器類。Random random=new Random();// 設定圖像背景色(因為是做背景,所以偏淡)g.setColor(getRandColor(180, 250));g.fillRect(0,0,width,height);//創建字體,字體的大小應該根據圖片的高度來定。Font font=new Font("Times New Roman",Font.PLAIN,28);//設置字體。g.setFont(font);//畫邊框。g.setColor(Color.BLACK);g.drawRect(0,0,width-1,height-1);
// 隨機產生160條干擾線,使圖象中的認證碼不易被其它程序探測到。g.setColor(Color.GRAY);for (int i=0;i<50;i++) {int x = random.nextInt(width);int y = random.nextInt(height);int xl = random.nextInt(12);int yl = random.nextInt(12);g.drawLine(x,y,x+xl,y+yl);}//randomCode用于保存隨機產生的驗證碼,以便用戶登錄后進行驗證。StringBuffer randomCode=new StringBuffer();// 設置默認生成4個驗證碼int length = 4;// 設置備選驗證碼:包括"a-z"和數字"0-9"String base = "abcdefghijklmnopqrstuvwxyz0123456789";int size = base.length();//隨機產生4位數字的驗證碼。for (int i=0;i<length;i++) {//得到隨機產生的驗證碼數字。int start = random.nextInt(size);String strRand = base.substring(start, start + 1);//用隨機產生的顏色將驗證碼繪制到圖像中。
// g.setColor(new Color(red,green,blue));// 生成隨機顏色(因為是做前景,所以偏深)g.setColor(getRandColor(1, 100));g.drawString(strRand,13*i+6,28);//將產生的四個隨機數組合在一起。randomCode.append(strRand);}//將四位數字的驗證碼保存到Session中。HttpSession session=req.getSession();session.setAttribute("rand",randomCode.toString());//禁止圖像緩存。res.setHeader("Pragma","no-cache");res.setHeader("Cache-Control","no-cache");res.setDateHeader("Expires", 0);res.setContentType("image/jpeg");//將圖像輸出到Servlet輸出流中。ServletOutputStream sos=res.getOutputStream();ImageIO.write(buffImg, "jpeg",sos);sos.close();}Color getRandColor(int fc,int bc){//給定范圍獲得隨機顏色Random random = new Random();if(fc>255) fc=255;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);}}
這個是之前弄過的一個,可能比你的需求是簡單了些,你就作為簡單的參考吧
轉載于:https://www.cnblogs.com/strugglesMen/archive/2011/04/18/2020121.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: MD5数据加密于文件加密
- 下一篇: silver light