Java web--生成二維碼

  生成二維碼的方法有很多,可使用谷歌的ZXing組件、Denso公司的QRcode組件或jQuery組件,因爲這篇博客Java web技術相關的,所以使用QRCode組件,需要從網上下載QRCode.jar,並加載到工程lib目錄下。

目錄

一、二維碼會重複嗎(我的疑問)

二、生成二維碼方法

三、生成二維碼實例


一、二維碼會重複嗎(我的疑問)

  根據我查到的信息,二維碼是不會重複的。

  1.二維碼代表的是信息,每個信息都是獨一無二的。

  2.如果有重複的二維碼,那麼代表這些二維碼指向的是同一種東西。

  3.二維碼能重複的概率很小,因爲它能表示很多的東西。

二、生成二維碼方法

  從網上下載QRCode.jar,並加載到工程lib目錄下。重要的事情多說一邊。

三、生成二維碼實例

    該程序包含兩個部分,一個jsp文件,一個servlet類,jsp文件用於獲取顯示信息,servlet類用於生成二維碼。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>生成二維碼</title>
</head>
<body>
<p>生成二維碼</p>
<hr>
<form action="../qrcode" method="post" target="qrcodeframe">
輸入文本:<input name="code"/><input type="submit" value="轉換"/>
</form>
<iframe name="qrcodeframe" frameborder="no" border="0"></iframe>
</body>
</html>
package a02a;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.swetake.util.Qrcode;

/**
 * Servlet implementation class a02a_sheng
 */
@WebServlet("/qrcode")
public class a02a_sheng extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public a02a_sheng() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
        //指定信息生成二維碼,獲取code
		String code=request.getParameter("code");
		Qrcode testQrcode=new Qrcode();
        //設置二維碼的排錯率,可選L(7%)、M(15%)、Q(25%)、H(30%)
        //排錯率越高能存儲的信息越少,但對二維碼的清晰度的要求越高
		testQrcode.setQrcodeErrorCorrect('M');
        //設置編碼模式,N爲數字,A爲英文字母,B爲二進制,K爲漢字
		testQrcode.setQrcodeEncodeMode('B');
        //設置二維碼尺寸,範圍爲1到40,值越大,尺寸越大,存儲信息越多
		testQrcode.setQrcodeVersion(7);
		byte[] d=code.getBytes("UTF-8");
		BufferedImage image=new BufferedImage(100,100,BufferedImage.TYPE_BYTE_BINARY);
		Graphics2D g=image.createGraphics();
		g.setBackground(Color.white);
		g.clearRect(0, 0, 100, 100);
		g.setColor(Color.BLACK);
		if(d.length>0&&d.length<120)
		{
			boolean[][] s=testQrcode.calQrcode(d);
			for(int i=0;i<s.length;i++)
			{
				for(int j=0;j<s.length;j++)
				{
					if(s[j][i]){g.fillRect(j*2+3,i*2+3,2,2);}
				}
			}
		}
		g.dispose();
		image.flush();
		ImageIO.write(image, "jpg", response.getOutputStream());
	}

}

   沒錯,你沒看錯,這個二維碼指向的就是度娘,掃一掃就可以到呦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章