2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java实现随机字母数字验证码

java实现随机字母数字验证码

时间:2022-07-19 04:36:13

相关推荐

java实现随机字母数字验证码

生成随街验证码

VerifyCode 工具类

package mon.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: -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_RGBGraphics2D 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 sb = new StringBuilder();for(int i =0;i<4;i++){String s= randomChar()+"";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;}//保存图片到指定的输出流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 redisString 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);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。