生成二維碼的方法有很多,可使用谷歌的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());
}
}
沒錯,你沒看錯,這個二維碼指向的就是度娘,掃一掃就可以到呦!!!