• 验证码


    jsp中验证码生成类:

    View Code
      1 package com.tenchong.util;
      2 
      3 import java.awt.Color; 
      4 import java.awt.Font; 
      5 import java.awt.Graphics; 
      6 import java.awt.image.BufferedImage; 
      7 import java.io.IOException; 
      8 import java.util.Random; 
      9 import javax.servlet.ServletOutputStream; 
     10 import javax.servlet.http.HttpServletRequest; 
     11 import javax.servlet.http.HttpServletResponse; 
     12 import com.sun.image.codec.jpeg.JPEGCodec; 
     13 import com.sun.image.codec.jpeg.JPEGImageEncoder;
     14 public class VerifyCodeGenerator {
     15      private static final VerifyCodeGenerator generator = new VerifyCodeGenerator(); 
     16      
     17         private final String ATTRIBUTE_NAME = "verifycode";  
     18         private final int WIDTH = 16;
     19         private final int HEIGHT=20;
     20         private final int CODE_LENGTH = 4; 
     21 
     22         private final String RAND_RANGE = "abcdefghijklmnopqrstuvwxyz" 
     23             + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     24             + "1234567890"; 
     25          
     26         private final char[] CHARS = RAND_RANGE.toCharArray(); 
     27          
     28         private Random random = new Random(); 
     29          
     30         private VerifyCodeGenerator(){ 
     31         } 
     32          
     33         public static VerifyCodeGenerator getInstance(){ 
     34             return generator; 
     35         } 
     36          
     37         private String getRandString(){ 
     38             StringBuilder sb = new StringBuilder(); 
     39             for (int i = 0; i < CODE_LENGTH; i++) 
     40                 sb.append(CHARS[random.nextInt(CHARS.length)]); 
     41             return sb.toString(); 
     42         } 
     43 
     44         private Color getRandColor(int ll, int ul){ 
     45             if (ll > 255) ll = 255; 
     46             if (ll < 1) ll = 1; 
     47             if (ul > 255) ul = 255; 
     48             if (ul < 1) ul = 1; 
     49             if (ul == ll) ul = ll + 1; 
     50             int r = random.nextInt(ul - ll) + ll; 
     51             int g = random.nextInt(ul - ll) + ll; 
     52             int b = random.nextInt(ul - ll) + ll; 
     53             Color color = new Color(r,g,b); 
     54             return color; 
     55         } 
     56          
     57 
     58         private BufferedImage getImage(String verifyCode){ 
     59              
     60             BufferedImage image = new BufferedImage(WIDTH * CODE_LENGTH, HEIGHT, BufferedImage.TYPE_INT_RGB); 
     61             Graphics graphics = image.getGraphics(); 
     62             graphics.setColor(getRandColor(200,250));
     63             graphics.fillRect(0, 0, WIDTH*4, HEIGHT);
     64             graphics.setColor(getRandColor(160,200));
     65             for (int i=0; i<50; i++){ 
     66                 int x = random.nextInt(WIDTH); 
     67                 int y = random.nextInt(HEIGHT); 
     68                 int xl = random.nextInt(12); 
     69                 int yl = random.nextInt(12); 
     70                 graphics.drawLine(x,y,x+xl,y+yl);
     71             } 
     72             graphics.setFont(new Font("Times New Roman", Font.PLAIN, 22));
     73             for (int i=0; i<this.CODE_LENGTH; i++){ 
     74                 String temp = verifyCode.substring(i, i+1); 
     75                 graphics.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); 
     76                 graphics.drawString(temp, 13 * i + 6, 16); 
     77             } 
     78             graphics.dispose(); 
     79              
     80             return image; 
     81         } 
     82     public void printImage(HttpServletRequest request, 
     83             HttpServletResponse response){ 
     84         response.setContentType("image/jpeg"); 
     85         response.setHeader("Pragma", "No-cache"); 
     86         response.setHeader("Cache-Control", "no-cache"); 
     87         response.setDateHeader("Expires", 2000); 
     88          
     89         String verifyCode = this.getRandString(); 
     90         String str = "ssss"; 
     91         for(int i=0; i<10; i++) 
     92             str = str + str; 
     93         BufferedImage bi = this.getImage(verifyCode); 
     94         request.getSession().setAttribute("ATTRIBUTE_NAME", verifyCode); 
     95         try{ 
     96             ServletOutputStream outStream = response.getOutputStream(); 
     97 
     98             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outStream); 
     99             encoder.encode(bi);
    100             outStream.flush(); 
    101        
    102             outStream.close(); 
    103         }catch(IOException ex){ 
    104             ex.printStackTrace(); 
    105         } 
    106     } 
    107     public boolean check(HttpServletRequest request){ 
    108         if (((String)request.getParameter(ATTRIBUTE_NAME)) 
    109                 .equalsIgnoreCase((String)request.getSession(true).getAttribute("ATTRIBUTE_NAME"))){ 
    110             request.getSession().removeAttribute(ATTRIBUTE_NAME); 
    111             return true; 
    112         }
    113         return false; 
    114     } 
    115 
    116 }

    代码中的check方法用于验证正确性,如:

    if(!verify.check(request)){
    				request.setAttribute("error", "验证码错误!");
    				return mapping.findForward("error");
    			}
    


    android中验证码生成类:

    View Code
      1 package cn.itcast.mp3;
      2 import java.util.Random;  
      3   
      4 import android.graphics.Bitmap;  
      5 import android.graphics.Canvas;  
      6 import android.graphics.Color;  
      7 import android.graphics.Paint;  
      8 import android.graphics.Bitmap.Config;  
      9   
     10 public class BPUtil {  
     11       
     12     private static final char[] CHARS = {  
     13         '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',  
     14         'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',   
     15         'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',  
     16         'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',   
     17         'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'  
     18     };  
     19       
     20     private static BPUtil bpUtil;  
     21       
     22     public static BPUtil getInstance() {  
     23         if(bpUtil == null)  
     24             bpUtil = new BPUtil();  
     25         return bpUtil;  
     26     }  
     27       
     28 //  width="60" height="30"    
     29 //          base_padding_left="5"   
     30 //          range_padding_left="10"   
     31 //          base_padding_top="15"   
     32 //          range_padding_top="10"   
     33 //          codeLength="4"   
     34 //          line_number="3"   
     35 //          font_size="20"   
     36       
     37     //default settings   
     38     private static final int DEFAULT_CODE_LENGTH = 4;  
     39     private static final int DEFAULT_FONT_SIZE = 20;  
     40     private static final int DEFAULT_LINE_NUMBER = 3;  
     41     private static final int BASE_PADDING_LEFT = 5, RANGE_PADDING_LEFT = 10, BASE_PADDING_TOP = 15, RANGE_PADDING_TOP = 10;  
     42     private static final int DEFAULT_WIDTH = 60, DEFAULT_HEIGHT = 30;  
     43       
     44     //settings decided by the layout xml   
     45     //canvas width and height   
     46     private int width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT;   
     47       
     48     //random word space and pading_top   
     49     private int base_padding_left = BASE_PADDING_LEFT, range_padding_left = RANGE_PADDING_LEFT,   
     50             base_padding_top = BASE_PADDING_TOP, range_padding_top = RANGE_PADDING_TOP;  
     51       
     52     //number of chars, lines; font size   
     53     private int codeLength = DEFAULT_CODE_LENGTH, line_number = DEFAULT_LINE_NUMBER, font_size = DEFAULT_FONT_SIZE;  
     54       
     55     //variables   
     56     private String code;  
     57     private int padding_left, padding_top;  
     58     private Random random = new Random();  
     59       
     60     public Bitmap createBitmap() {  
     61         padding_left = 0;  
     62           
     63         Bitmap bp = Bitmap.createBitmap(width, height, Config.ARGB_8888);   
     64         Canvas c = new Canvas(bp);  
     65   
     66         code = createCode();  
     67           
     68         c.drawColor(Color.WHITE);  
     69         Paint paint = new Paint();  
     70         paint.setTextSize(font_size);  
     71           
     72         for (int i = 0; i < code.length(); i++) {  
     73             randomTextStyle(paint);  
     74             randomPadding();  
     75             c.drawText(code.charAt(i) + "", padding_left, padding_top, paint);  
     76         }  
     77   
     78         for (int i = 0; i < line_number; i++) {  
     79             drawLine(c, paint);  
     80         }  
     81           
     82         c.save( Canvas.ALL_SAVE_FLAG );//保存     
     83         c.restore();//   
     84         return bp;  
     85     }  
     86       
     87     public String getCode() {  
     88         return code;  
     89     }  
     90       
     91     private String createCode() {  
     92         StringBuilder buffer = new StringBuilder();  
     93         for (int i = 0; i < codeLength; i++) {  
     94             buffer.append(CHARS[random.nextInt(CHARS.length)]);  
     95         }  
     96         return buffer.toString();  
     97     }  
     98       
     99     private void drawLine(Canvas canvas, Paint paint) {  
    100         int color = randomColor();  
    101         int startX = random.nextInt(width);  
    102         int startY = random.nextInt(height);  
    103         int stopX = random.nextInt(width);  
    104         int stopY = random.nextInt(height);  
    105         paint.setStrokeWidth(1);  
    106         paint.setColor(color);  
    107         canvas.drawLine(startX, startY, stopX, stopY, paint);  
    108     }  
    109       
    110     private int randomColor() {  
    111         return randomColor(1);  
    112     }  
    113   
    114     private int randomColor(int rate) {  
    115         int red = random.nextInt(256) / rate;  
    116         int green = random.nextInt(256) / rate;  
    117         int blue = random.nextInt(256) / rate;  
    118         return Color.rgb(red, green, blue);  
    119     }  
    120       
    121     private void randomTextStyle(Paint paint) {  
    122         int color = randomColor();  
    123         paint.setColor(color);  
    124         paint.setFakeBoldText(random.nextBoolean());  //true为粗体,false为非粗体   
    125         float skewX = random.nextInt(11) / 10;  
    126         skewX = random.nextBoolean() ? skewX : -skewX;  
    127         paint.setTextSkewX(skewX); //float类型参数,负数表示右斜,整数左斜   
    128 //      paint.setUnderlineText(true); //true为下划线,false为非下划线   
    129 //      paint.setStrikeThruText(true); //true为删除线,false为非删除线   
    130     }  
    131       
    132     private void randomPadding() {  
    133         padding_left += base_padding_left + random.nextInt(range_padding_left);  
    134         padding_top = base_padding_top + random.nextInt(range_padding_top);  
    135     }  
    136 } 

      调用方式:

    ImageView imageView = (ImageView)findViewById(R.id.imageView);  
    imageView.setImageBitmap(BPUtil.getInstance().createBitmap());  

    通过getcode可以获取验证码字符串。

  • 相关阅读:
    springMVC实现表单上传文件,MultipartResolver介绍及配置
    利用 java.util.Timer来写一个定时器
    集合泛型的不变性,而数组具有协变性,注意赋值容易导致的出错
    Python
    GenericServlet
    ServletRequest
    ServletConfig与ServletContext
    Servlet配置及生命周期
    使用jQuery实现Ajax
    XMLHttpRequest实现Ajax &数据格式JSON
  • 原文地址:https://www.cnblogs.com/qsl568/p/2530400.html
Copyright © 2020-2023  润新知