二维码

来源:互联网 发布:映射网络驱动器不成功 编辑:程序博客网 时间:2024/04/26 06:12

目前我使用的二维码开发有三种方式

.QRCode(日本人的、支持中文、需要下载qrcode.zip包)

2.zxing(google的 )

3.JS生成二维码(使用jquery-qrcode生成二维码,需要下载jquery-qrcode插件)

    解决JS生成二维码时候的乱码问题(copy过来的)

  1. function utf16to8(str) {   
  2.     var out, i, len, c;   
  3.     out = "";   
  4.     len = str.length;   
  5.     for(i = 0; i < len; i++) {   
  6.     c = str.charCodeAt(i);   
  7.     if ((c >= 0x0001) && (c <= 0x007F)) {   
  8.         out += str.charAt(i);   
  9.     } else if (c > 0x07FF) {   
  10.         out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));   
  11.         out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));   
  12.         out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));   
  13.     } else {   
  14.         out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));   
  15.         out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));   
  16.     }     
  17. }    return out;   
  18. }  

4.BarCode4j(barcode4j是使用datamatrix的二维码生成算法,生成长方形)


1.QR使用

    public class TwoDimensionCode {
/**
* 生成二维码
* @param content 存储内容
* @param imgType 图片类型 
* @param size    二维码尺寸 
* @date 2015年7月26日
*/
    public BufferedImage encoderQRcode(String  content,String imgType, int size){
    BufferedImage bufImg=null;
    Qrcode qrcodeHandler=new Qrcode();
    // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,
    //但对二维码清晰度的要求越小 
    qrcodeHandler.setQrcodeErrorCorrect('L');
    /**
    * 编码模式:Numeric:数字;Alphanumeric:英文字母;Binary:二进制;Kanji:汉字
    */
    qrcodeHandler.setQrcodeEncodeMode('B');
    qrcodeHandler.setQrcodeVersion(size);//设置二维码尺寸
   
    //得到内容的字节数组,设置编码格式
    try {
byte[] contentBytes=content.getBytes("UTF-8");
int imgSize= 67 + 12 * (size - 1);//图片尺寸
//bufImg= new BufferedImage(140,140, BufferedImage.TYPE_INT_RGB);
bufImg= new BufferedImage(imgSize,imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs=bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);
//设置图片颜色 black
gs.setColor(Color.BLACK);
//设置偏移量 不设置可能导致解析出错 
            int pixoff = 2; 
            //输出内容 二维码 
            if(contentBytes.length>0&&contentBytes.length<800){
            //qrcodeHandler.calStructureappendParity(originaldata)
            boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
            for (int i = 0; i < codeOut.length; i++) {
for (int j = 0; j < codeOut.length; j++) {
if(codeOut[j][i]){
gs.fillRect(j*3+pixoff, i*3+pixoff,3,3);
}
}
}
            }else{
            throw new Exception("QRCode content bytes length ="+ contentBytes.length +  "not in [ 0,800].");
            }
            gs.dispose();
            bufImg.flush();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return bufImg;
   
    }

    //解码
    public String decoderQRCode(String imgPath){
    // QRCode 二维码图片的文件 
    File imageFile=new File(imgPath);
    BufferedImage bufImg=null;
    String content=null;
    try {
bufImg=ImageIO.read(imageFile);
QRCodeDecoder decoder=new QRCodeDecoder();
content= new String (decoder.decode(new TwoDimensionCodeImage(bufImg)),"UTF-8");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return content;
    }

2.js生成二维码

<script type="text/javascript">
    var QRCode = $.AMUI.qrcode;
    var money =$("#owe").val();
    var transfer = {
        "QR_type" : "2",
        "actionType" : "0",
        "merchantNo" : "${commercial.merchantno}",
        "commercialCode" : "${commercial.commercialcode}",
        "point":"${commercial.point==''||commercial.point==null?'0':commercial.point}",
        "cahierId" : "${user.id}",
        "name" : "${commercial.comname}",
        "transAmt" : money
    };
    $("#doc-qrcode").html(new QRCode({
        text : JSON.stringify(transfer), // 要生产二维码的文字
        render : "", // 渲染方式,默认的选择顺序为 `canvas` -> `svg` -> `table`
        width : 180, // 二维码宽度 `px`
        height : 180, // 二维码高度 `px`
        correctLevel : 3, // 纠错级别,可取 0、1、2、3,数字越大说明所需纠错级别越大
        background : "#ffffff", // 背景色
        foreground : "#000000" // 前景色
    }));
    $(document).ready(function() {
       var options = {
           beforeSubmit : showRequest,
           success : showResponse,
           type : "post"
       };
 
       $("#cashForm").submit(function() {
       
        //输入是否为数字
        if(!isNaN($("#owe").val())){
            $(this).ajaxSubmit(options);
        }else{
        $('.am-modal-bd').html("请输入正确的金额!");
               $('#xlm-alert').modal();
               $("#owe").val("");
       }
           return false;
       });
     
    });
    function showRequest(formData, jqForm, options) {
        return true;
    }


    function showResponse(responseText, statusText, xhr, $form) {
        var m = $("#owe").val();
        if(m != "0"){
            transfer.transAmt = m;
            $("#doc-qrcode").html(new QRCode({
                text : JSON.stringify(transfer), // 要生产二维码的文字
                render : "", // 渲染方式,默认的选择顺序为 `canvas` -> `svg` -> `table`
                width : 180, // 二维码宽度 `px`
                height : 180, // 二维码高度 `px`
                correctLevel : 3, // 纠错级别,可取 0、1、2、3,数字越大说明所需纠错级别越大
                background : "#ffffff", // 背景色
                foreground : "#000000" // 前景色
            }));
        }
    }
    
  //格式化金额
function fmoney(s, n)
{
  n = n > 0 && n <= 20 ? n : 2;
  s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";//更改这里n数也可确定要保留的小数位
  var l = s.split(".")[0].split("").reverse(),
  r = s.split(".")[1];
  t = "";
  for(i = 0; i < l.length; i++ )
  {
     t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
  }
  return t.split("").reverse().join("") + "." + r.substring(0,2);//保留2位小数  如果要改动 把substring 最后一位数改动就可
}
</script>

0 0
原创粉丝点击