基于Java实现随机字母数字验证码

生成随机验证码VerifyCode 工具类

package com.meeno.common.cerifycode; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Random; /**  * @description: 随机验证码  * @author: Wzq  * @create: 2020-09-08 16:55  */ public class VerifyCode {      private int w=70;     private int h=35;     private Random r= new Random();     private String[] fontNames={ "宋体",基于"华文楷体","黑体","微软雅黑","楷体_GB2312"};     private String codes="012345678901234567890123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";     private Color bgColor = new Color(255,255,255);     private String text;     private Color randomColor(){          int red = r.nextInt(150);         int green = r.nextInt(150);         int blue = r.nextInt(150);         return new Color(red,green,blue);     }    private Font randomFont(){          int index = this.r.nextInt(fontNames.length);         String fontName = fontNames[index];        int style = this.r.nextInt(4);         int size = this.r.nextInt(5) + 24;         return new Font(fontName, style, size);     }    private void drawLine (BufferedImage image){          int num = 3;         Graphics2D g2=(Graphics2D)image.getGraphics();        for(int i=0;i<num;i++){              int x1=r.nextInt(w);             int y1=r.nextInt(h);             int x2=r.nextInt(w);             int y2=r.nextInt(h);             g2.setStroke(new BasicStroke(1.5F));             g2.setColor(Color.BLUE);            g2.drawLine(x1,y1,x2,y2);        }    }    private char randomChar(){          int index=r.nextInt(this.codes.length());         return this.codes.charAt(index);     }    private BufferedImage createImage(){          BufferedImage image=new BufferedImage(this.w,this.h,BufferedImage.TYPE_INT_RGB);//BufferedImage.TYPE_INT_RGB         Graphics2D g2 = (Graphics2D)image.getGraphics();         g2.setColor(this.bgColor);         g2.fillRect(0,0,this.w,this.h);         return image;     }     public BufferedImage getImage(){          BufferedImage image=createImage();         Graphics2D g2=(Graphics2D)image.getGraphics();         StringBuilder&nbsp;sb&amp;amp;nbsp;= new StringBuilder();         for(int i =0;i<4;i++){              String s= randomChar()+"";            &nbsp;sb.append(s);             float x= i*1.0F*this.w/4.0F;             g2.setFont(randomFont());             g2.setColor(randomColor());             g2.drawString(s,x,this.h-5);         }         this.text=sb.toString();         drawLine(image);//添加干扰线         return image;     }     //返回验证码上的文本     public String getText(){          return this.text;     }     //保存图片到指定的云南idc服务商输出流     public static void output(BufferedImage image, OutputStream out)             throws IOException {          ImageIO.write(image,"JPEG",out);     }     public static void main(String[] args) throws IOException {          VerifyCode vc=new VerifyCode();         BufferedImage bi = vc.getImage();         VerifyCode.output(bi,new FileOutputStream("E:\\work\\temp\\xxx.jpg"));         System.out.println("图片中的亿华云验证是云服务器:"+vc.getText());     } } 

使用

/**      * 生成随机验证码     */    @RequestMapping("randomVerifyCode.do")     public ResponseBean randomVerifyCode() throws IOException {         VerifyCode vc = new VerifyCode();        BufferedImage bi = vc.getImage();        //VerifyCode.output(bi,response.getOutputStream());         ByteArrayOutputStream out = new ByteArrayOutputStream();        ImageIO.write(bi, "png", out);         byte[] bytes = out.toByteArray();         String str = Base64.encode(bytes);        str = "data:image/png;base64," + str;         String uuid = IdUtil.simpleUUID();        Map<String,String> resultMap = Maps.newHashMap();        resultMap.put("base64", str);         resultMap.put("uuid", uuid);         //save redis        String key = "RandomVerify:" + uuid;         RedisUtil.set(key, vc.getText(), 180);         return ResultUtil.success(resultMap);     } 

验证方法

/**      * 账号登录      * @param session      * @param phone      * @param pwd      * @param entryType      * @return      */     @RequestMapping("accountLogin.do")     public ResponseBean accountLogin(final HttpSession session, String phone, String pwd, String entryType,                                      String uuid, String randomCerifyCode){          //校验验证码         MeenoAssert.hasLength(randomCerifyCode,"randomCerifyCode can not empty!");         Object randomCerifyCodeObj = RedisUtil.get("RandomVerify:" + uuid);         MeenoAssert.notNull(randomCerifyCodeObj, CErrEnum.RANDOM_VERIFY_CODE_FAILURE);         MeenoAssert.isTrue(randomCerifyCode.toLowerCase().equals(randomCerifyCodeObj.toString().toLowerCase()), CErrEnum.RANDOM_VERIFY_CODE_ERR);         LoginResult loginResult = this.employeeService.accountLogin(session, phone, pwd, entryType);         EmpView employeeView = this.employeeService.getEmployee(loginResult.getUserInfo().getId());         Map<String,Object> resultMap = Maps.newHashMap();         resultMap.put("loginResult", loginResult);         resultMap.put("employee", employeeView);         return ResultUtil.success(resultMap);     } 
数据库
上一篇:专家视点:数据中心管理软件的演变
下一篇:边缘运营的新前沿阵地——Dell NativeEdge​