最近在实现会议签到功能,为了防止拍照作弊,生成一个时效性二维码,比如我把一个 http://www.baidu.com/ 生成一个二维码,10秒钟之后,把这个地址重新生成一个新的二维码,原来的二维码失效,扫描提示过期。请问这个功能该怎么做? 以下是我的二维码生成代码,求助各路同行帮助
public class RecodeUtil {
public static void creatRrCode(String contents, int width, int height,HttpServletResponse response) {
Hashtable hints = new Hashtable();
//容错级别最高
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
//设置字符编码
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//二维码空白区域,最小为0也有白边,只是很小,最小是6像素左右
hints.put(EncodeHintType.MARGIN, 1);
try {
// 1、读取文件转换为字节数组
BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height, hints);
BufferedImage image = toBufferedImage(bitMatrix);
//转换成png格式的IO流
ImageIO.write(image, "png", response.getOutputStream());
} catch (WriterException e) { // TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* image流数据处理
*
*/
public static BufferedImage toBufferedImage(BitMatrix matrix) {
int width = matrix.getWidth();
int height = matrix.getHeight();
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, matrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return image;
}
}