生成和解析二维码(QRCode.jar)

本文介绍了QR码的基本概念,它是一种快速响应的二维条码,能存储大量信息且无需直线对准即可解码。内容提到了QR码的特征和定位图案,并提供了两个实现方法:使用Java(基于Maven)和JavaScript来生成和解析QR码的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先介绍什么是 QR 码?
QR 码 是二维条码的一种,QR 来自英文 “Quick Response” 的缩写,即快速反应的意思,源自发明者希望 QR 码可让其内容快速被解码。QR码比普通条码可储存更多资料,亦无需像普通条码般在扫描时需直线对准扫描器。
QR 码呈正方形,只有黑白两色。在4个角落的其中3个,印有较小,像“回”字的的正方图案。这 3 个是帮助解码软件定位的图案,使用者不需要对准,无论以任何角度扫描,资料仍可正确被读取。


事例:
二维条码/二维码


错误修正容量

L水平7% 的字码可被修正
M水平15% 的字码可被修正
Q水平25% 的字码可被修正
H水平30% 的字码可被修正

QR码资料容量

数字最多 7,089 字符
字母最多 4,296 字符
二进制数 (8 bit)最多 2,953 位元
日文汉字 / 片假名最多 1,817 字符 (采用Shift_JIS)
中文汉字最多 984 字符 (采用UTF-8)
中文汉字最多 1,800 字符 (采用BIG5)

二维条码/二维码的特点
1.高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。
2.编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可表示图像数据。
3.容错能力强,具有纠错功能:这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息。
4.译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一。
5.可引入加密措施:保密性、防伪性好。
6.成本低,易制作,持久耐用。
7.条码符号形状、尺寸大小比例可变。
8.二维条码可以使用激光或CCD阅读器识读。

实现方式:

1.Java(参照http://blog.youkuaiyun.com/he90227/article/details/39078803)非常详细,还是Maven版的。


下载:http://download.youkuaiyun.com/detail/he90227/7867043


2.JavaScript参照

<html>
<span style="white-space:pre">	</span><head>
<span style="white-space:pre">	</span><title>二维码Test</title>
<span style="white-space:pre">	</span><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<span style="white-space:pre">	</span><meta name="keywords" content="JS生成二维码" />
<span style="white-space:pre">	</span><!--此处需要引入三个JS文件
<span style="white-space:pre">	</span>  一、jquery.js
<span style="white-space:pre">	</span>  二、qrcode.js
<span style="white-space:pre">	</span>  三、jquery.qrcode.js
<span style="white-space:pre">	</span>-->
<span style="white-space:pre">	</span><script src="js/jquery-1.8.0.js" type="text/javascript"></script>
<span style="white-space:pre">	</span><script src="js/qrcode.js" type="text/javascript"></script>
<span style="white-space:pre">	</span><script src="js/jquery.qrcode.js" charset="utf-8" type="text/javascript"></script>
<span style="white-space:pre">	</span><script type="text/javascript">
<span style="white-space:pre">		</span>$(function() {
<span style="white-space:pre">			</span>$("#bt").bind("click", function() {
<span style="white-space:pre">				</span>var text = $("#text").val();
<span style="white-space:pre">				</span>//添加了logo图片路径
<span style="white-space:pre">				</span>$('#div_div').qrcode({
<span style="white-space:pre">					</span>text : utf16to8(text),
<span style="white-space:pre">					</span>height : 100,
<span style="white-space:pre">					</span>width : 100,
<span style="white-space:pre">					</span>//此处添加了个logo,可以随意替换链接
<span style="white-space:pre">					</span>src : 'file:///C:/Test.jpg'
<span style="white-space:pre">				</span>});
<span style="white-space:pre">			</span>})
<span style="white-space:pre">		</span>})
<span style="white-space:pre">		</span>function utf16to8(str) { 
<span style="white-space:pre">			</span>//转码
<span style="white-space:pre">			</span>var out, i, len, c;
<span style="white-space:pre">			</span>out = "";
<span style="white-space:pre">			</span>len = str.length;
<span style="white-space:pre">			</span>for (i = 0; i < len; i++) {
<span style="white-space:pre">				</span>c = str.charCodeAt(i);
<span style="white-space:pre">				</span>if ((c >= 0x0001) && (c <= 0x007F)) {
<span style="white-space:pre">					</span>out += str.charAt(i);
<span style="white-space:pre">				</span>} else if (c > 0x07FF) {
<span style="white-space:pre">					</span>out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
<span style="white-space:pre">					</span>out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F));
<span style="white-space:pre">					</span>out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
<span style="white-space:pre">				</span>} else {
<span style="white-space:pre">					</span>out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F));
<span style="white-space:pre">					</span>out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F));
<span style="white-space:pre">				</span>}
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>return out;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span></script>
<span style="white-space:pre">	</span></head>
<span style="white-space:pre">	</span><body>
<span style="white-space:pre">		</span><input type="text" id="text" />
<span style="white-space:pre">		</span><input type="button" value="生成二维码" id="bt" />
<span style="white-space:pre">		</span><div id="div_div">
<span style="white-space:pre">			</span><div id="qr_container" style="margin: auto; position: relative;"></div>
<span style="white-space:pre">		</span></div>
<span style="white-space:pre">		</span><!-- 用来校验该浏览器是否支持HTML5 -->
<span style="white-space:pre">		</span><canvas id="Canvas"></canvas>
<span style="white-space:pre">	</span></body>
    </html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值