旋转的钢笔 2020-10-13 14:16 采纳率: 54.5%
浏览 915
已结题

java 如何生成时效性二维码?

最近在实现会议签到功能,为了防止拍照作弊,生成一个时效性二维码,比如我把一个 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;
    }

}
  • 写回答

2条回答 默认 最新

  • 燕归来兮_ 2020-10-14 09:45
    关注

    可以在生成的时候吧时间戳放进去,然后扫描的时候,访问网页的时候携带这个时间戳参数,在后端根据自己的业务逻辑判断是否过期即可!!!

    当然为了防止伪造二维码,可以加一些算法校验

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 已采纳回答 10月19日

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格