import java.io.*;
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网络空间、网站托管、服务器托管、企业网站设计、伊通网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
import java.util.Date;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
public class QRCodeEncoderTest
{
/** Creates a new instance of QRCodeEncoderTest */
public QRCodeEncoderTest()
{
}
public static void create_image(String sms_info)throws Exception{
try{
qrcode testQrcode =new qrcode();
testQrcode.setQrcodeErrorCorrect('M');
testQrcode.setQrcodeEncodeMode('B');
testQrcode.setQrcodeVersion(7);
String testString = sms_info;
byte[] d = testString.getBytes("gbk");
System.out.println(d.length);
//BufferedImage bi = new BufferedImage(98, 98, BufferedImage.TYPE_INT_RGB);
BufferedImage bi = new BufferedImage(98, 98, BufferedImage.TYPE_BYTE_BINARY);
Graphics2D g = bi.createGraphics();
g.setBackground(Color.WHITE);
g.clearRect(0, 0, 98, 98);
g.setColor(Color.BLACK);
// 限制最大字节数为120
if (d.length0 d.length 120){
boolean[][] s = testQrcode.calQrcode(d);
for (int i=0;is.length;i++){
for (int j=0;js.length;j++){
if (s[j][i]) {
g.fillRect(j*2+3,i*2+3,2,2);
}
}
}
}
g.dispose();
bi.flush();
File f = new File("D:\\QRCodeTest\\"+sms_info+".jpg");
if(!f.exists()){
f.createNewFile();
}
//创建图片
ImageIO.write(bi, "jpg", f);
} // end try
catch (Exception e) {
e.printStackTrace();
public class ArrayExample{ public static void main(String[] args){ int i=1; int yh[] = new int[8]; for(i=0;i8;i++) {
一维条码 1.1 一维条码简述条码是将线条与空白按照一定的编码规则组合起来的符号, 用以代表一定的 字母、数字等资料。在进行辨识的时候,是用条码阅读机扫描,得到一组反射光 信号,此信号经光电转换后变为一组与线条、空白相对应的电子讯号,经解码后 还原为相应的文数字,再传入电脑。 世界上约有 225 种以上的一维条码,每种一维条码都有自己的一套编码规 格,规定每个字母(可能是文字或数字或文数字)是由几个线条(Bar)及几个空白 (Space)组成, 以及字母的排列。 一般较流行的一维条码有 39 码、 码、 EAN UPC 码、 128 码,以及专门用於书刊管理的 ISBN、ISSN 等。 表1 年 1982 1983 1984 1984 1984 Code39 条码 一维条码标准制定年代表 纳入标准 Military Standard 1189 ANSI MH10.8M ANSI MH10.8M AIAG 标准 HIBC 标准 Code39, Interleaved 2 of 5, Codabar UPC Code39 Code39 从 UPC 以后,为满足不同的应用需求,陆陆续续发展出各种不同的条码标准 和规格,时至今日,条码已成为商业自动化不可缺少的基本条件。条码可分为一 维条码 (One Dimensional Barcode, 1D) 和二维码(Two Dimensional Code, 2D) 两大类, 目前在商品上的应用仍以一维条码为主, 故一维条码又被称为商品条码, 二维码则是另一种渐受重视的条码,其功能较一维条码强,应用范围更加广泛。 1.2 一维条码规格的内容在一个条码的起头及结束的地方,都会放入起始码及结束码,用以辨识条 码的起始及结束,不过不同条码规格的起始码及结束码的图样并不完全相同。具 体而言,每一种条码规格明定了下列七个要项: 1、 字元组合 、 字元组合(Character Set) 每一种条码规格所能表示的字元组合,有不同的范围及数目,有些条码规格 只能表示数字,如 UPC 码、EAN 码;有些则能表示大写英文字及数字,甚至能表 示出全部 ASCII 字元表上的 128 字元,如 39 码、128 码。 2、 符号种类 、 符号种类(Symbology Type) 依据条码被解读时的特性可将条码规格分成两大类: 分散式 每一个字元可以独自地解码,列印时每个字元与旁边的字元间,是由字间距 分开的,而且每个字元固定是以线条做为结束。然而,并不一定是每一个字间距 的宽度大小都必须相同,可以容许某些程度的误差,只要彼此差距不大即可,如 此,对条码印表机(Barcode Printer)的机械规格要求可以比较宽松。例如 39 码与 128 码。 连续式 字元之间没有字间距,每个字元都是线条开始,空白结束。且在每一个字的 结尾后,马上就紧跟下一个字元的起头。由於无字间距的存在,所以在同样的空 间内,可列印出较多的字元数,但相对地,因为连续式条码的密度比较高,其对 条码机的列印精密度的要求也较高。例如 UPC 和 EAN 码。 3、 粗细线条的数目 、 条码的编码方式, 是藉由许多粗细不一的线条及空白的组合方式来表示不同 的字元码。大多数的条码规格都是只有粗和细两种线条,但也有些条码规格使用 到二种以上不同粗细的线条。 4、 固定或可变长度 、 指在条码中包含的资料长度是固定或可变的, 有些条码规格因限於本身结构 的关系,只能使用固定长度的资料,如 UPC 码、EAN 码。 5、 细线条的宽度 、 指条码中细线条及空白的宽度, 通常是某个条码中所有细的线条及空白的平 均值,而且它使用的单位通常是 mil (千分之一英寸,即 0.001 inch)。 6、 密度 、 指在一固定长度内可表示字元数目,例如条码规格 A 的密度高於条码规格 B 的密度,则表示当两者密度值相同时,在同一长度内,条码 A 可容纳得下较多的 字元。 7、 自我检查 、 指某个条码规格是否有自我检测错误的能力,会不会因一个列印上的小缺 陷,而可能使得一个字元被误判成为另外一个字元。有「自我检查」能力的条码 规格,大多没有硬性规定要使用「检查码」 ,例如 39 码。没有「自我检查」能力 的条码规格,在使用上大多有「检查码」的设定,如 EAN 码、UPC 码等。 1.3 一维条形码符号的结构 一维条形码符号的通常一个完整的条码是由两侧静空区、起始码、资料码、检查码、终止码组 成,以一维条码而言,其排列方式通常如下所示: 静空区: 静空区: 位於条码两侧无任何符号及资讯的白色区域,主要用来提示扫瞄器准备扫瞄。 起始码: 起始码: 指条码符号的第一位字码,用来标识一个条码符号的开始,扫瞄器确认此字码存 在后开始处理扫瞄脉冲。 资料码: 资料码: 位於起始码后面的字码,用来标识一个条码符号的具体数值,允许双向扫瞄。 检查码: 检查码: 用来判定此次阅读是否有效的字码,通常是一种算术运算的结果,扫瞄器读入条 码进行解码时,先对读入各字码进行运算,如运算结果与检查码相同,则判定此 次阅读有效。 1.4 一维码的类别 1.4.1 UPC 码 UPC 码(Universal Product Code)是最早大规模应用的条码,其特性是一种 长度固定、 连续性的条码, 目前主要在美国和加拿大使用, 由於其应用范围广泛, 故又被称万用条码。 UPC 码仅可用来表示数字,故其字码集为数字 0~9。UPC 码共有 A、B、C、D、 E 等五种版本,各版本的 UPC 码格式与应用对象如表 2 所示。表 2 UPC 码的各种版本 版本 UPC-A UPC-B UPC-C UPC-D UPC-E 注:S-系统码 应用对象 通用商品 医药卫生 产业部门 仓库批发 商品短码 X-资料码 C-检查码 SXXXXX XXXXXC SXXXXX XXXXXC XSXXXXX XXXXXCX SXXXXX XXXXXCXX XXXXXX 格 式 下面将再进一步介绍最常用的 UPC 标准码(UPC-A 码)和 UPC 缩短码(UPC-E 码) 的结构与编码方式。 UPC1.4.1.1 UPC-A 码 UPC1.4.1.2 UPC-E 码 1.4.2 EAN 码依结构的不同,可区分为: 依结构的不同,可区分为: EAN 码是国际物品编码协会制定的一种商品用条码,通用于全世界。EAN 码符号有标准版(EAN-13)和缩短版(EAN-8)两种标准版表示 13 位数字,又称 为 EAN13 码,缩短版表示 8 位数字,又称 EAN8。两种条码的最后一位为校验位, 由前面的 12 位或 7 位数字计算得出。两种版本的编码方式可参考国标 GB-12094-1998。 1.4.2.1 EAN-13 码 1.4.2.2 EAN-8 码 1.4.3 ISBN 码 ISBN 与 ISSNEAN 的用途很广, 除了我国的商品条码 CAN 以及日本商品条码 JAN 外,目前国际认可的书籍代号与期刊号的条码,也都是由 EAN 变身而来的。 简单来说,ISBN 与 EAN 的对应关系为:978 + ISBN 前 9 码 + EAN 检查码。 ISBN10 ISBN 13 ISBN 13 Dual 1.4.4 ISSN 码国际标准期刊号 ( International Standard Serial Number,简称 ISSN ), ISSN 与 EAN 的对应关系为:977 + ISSN 前 7 码 + 00 + EAN 检查码。 1.4.5 128 码 128 码开始于 1981 年推出,是一种长度可变、连续性的字母数字条码。与 其他一维条码比较起来,128 码是较为复杂的条码系统,而其所能支援的字元也 相对地比其他一维条码来得多,又有不同的编码方式可供交互运用,因此其应用 弹性也较大。 EANEAN-128 码 GSIGSI-128 码 UCCUCC-128 1.4.6 三九码 Code39 码(也被称为“ USS Code 39”、“Code 3/9”、“Code 3 of 9 ”、 “USD-3”、“ Alpha39 ”、“类型 39 ” )是一种条码类型,可以编码大写 字母( a 到 z ) ,数字( 0 到 9 )和少数特殊字符,如$符号等。条码本身不 包含检查码(相反,例如,代码 128 ) ,但它可以被视为自检一些,理由是一 个错误的解释,律师无法生成另一种有效的字符。可能是最严重的缺点是它的 Code39 码的数据存储密度低: 它需要更多的空间编码数据的 Code39 码比, 例如, 在代码 128 。 这意味着, 非常小的货物不能标记 Code39 码的条码。 然而, Code39 码仍然是广泛使用的, 可解码几乎任何条形码阅读器。 好处之一是, Code39 码, 因为没有必要产生一个校验数位,它可以很容易地集成到现有的印刷系统,增加 了条码打印机字体的系统或打印机,然后打印的原始数据中的字体。 宽度之间的比例缩小和广泛之间可以选择 1:2 和 1:3 。 1.4.6.1 Code 39 1.4.6.2 Code 39 Full SCII 普通的 39 码只能识别 43 个字符,如果想识别这 43 个以外的 ASCII 码,那么就要用 到 Code 39 Full ASCII。Code 39 Full ASCII 主要用于生产制造业,军事制造以及保健器材等方 面。 1.4.6.3 Trioptic 39 Trioptic 39 码是39 码的一个变种,应用于磁带和计算机耗材的标记。 Trioptic 39码是定长码,包含1 个起始符、6 个数据字符和1 个终止符。 Trioptic 39 码起始符/终止符传送:Trioptic 39 码的起始符和终止符是 “*”。如使能,输出字符数据包含两个“$”。 1.4.7 二五条码二五条码研制于 60 年代后期,它用于仓库的分类管理,标示胶卷包装及机 票的连续号等。 图:二五条码 二五条码有两种单元宽度,它仅用条表示信息,条码字符由规则排列 的 5 个条组成,其中两个是宽条,其余是窄条。二五条码的编码容量为 C(5,2)=10 ,所以它的字符集为数字字符 0-9 。二五条码是一种非连续型、双 向可读且具有自校验功能的非定长条码。 1.4.7.1 Interleaved 2 of 5(交叉 25 码) ( 交插二五条码是由美国 intermec 公司与 1972 年发明, 初期应用于仓储及重工 业领域,标准化后用于储运单元的识别与管理。 1.4.7.2 Industrial 2 of 5 交叉 25 码是一个连续两个宽度条码符号编码位数。它是用于商业的 135 电 影和纸箱的一些产品,而产品内标记有 UPC 或 EAN 的。 1.4.7.3 Matrix 2 of 5 1.4.8 China Post 中国邮政条码是通过更改 Matrix 2 of 5 而来,更改了启动和停止字符。 1.4.9 九三码 九三码 Code 93 码的条码符号是由 Intermec 公司于 1982 年设计的 提供更高的密 度和数据安全增强码 39 。它是一个字母,长度可变符号。代码 93 主要用于由 加拿大邮政编码补充提供的资料。每一个符号包括两个检查字符。 1.4.10 库德巴条码(codabar) 库德巴条码( )库德巴条码是 1972 年推出的, 它广泛应用于医疗卫生及图书行业, 1977 年美国输血协会将库德巴条码规定为血袋标识标准条码。 1.4.11 CODE 11(USD-8) 11 条码主要用于通讯设备,电信领域。 1.4.12 MSI Plessey MSI Plessey 条码是 Plessey 条码变种。它是一个脉冲宽度调制非自检查代码, 用在商店货架标签为主。 1.4.13 Plessey Plessey 码产生于英国,并推动了 MSI、Anker 和 Telxon 的发展。 1.4.14 PostNet (3 of 5) ) PostNet 条码是美国邮政自动处理邮件使用的。 1.4.15 Australia Post 澳大利亚邮政条码 1.4.16 Code 32 Code 主要用意大利医药产品的编码。 1.4.17 Deutsche Post Identcode/Leitcode Identcode/Leitcode 主要用于德国的邮政。 1.4.18 JAN-13 JAN-13 基本上是 EAN-13 的另外一个名字,是日本的物件的条码。 1.4.19 JAN-8 JAN-8 是 EAN-8 在日本的名字。 1.4.20 Numly Numly 是一个独特的标识,它允许作者和出版社为出版物的内容分配 ID 进行跟 踪。 1.4.21 Opc Opc 主要用于制造零售的光学产品。 1.4.22 Pharmacode Pharmacode 是一个用于制药产业包装控制标准,它能在有些许错误的情况 下准确读出,只有一个读取方向是正确的,可以彩色印刷。 1.4.23 Planet The PostaL Alpha Numeric Encoding Technique (PLANET),主要是美国在 邮电业服务使用,对邮寄的物品进行识别和辨认。 1.4.24 PZN PZN 主要德国人用于药物和保健产品的分发。 1.4.25 Royal Mail(RM4SCC) ( ) 1.4.26 KIX KIX 产生于 1999 年,荷兰用其进行信件的编排分类。 1.4.27 Scc14 SCC-14(shipping Container Code)用于对集装箱运输。 1.4.28 Singapore Post 1.4.29 ITF 条码 ITF 条码是用于储运单元的条码符号, ITF 条码符有 ITF -14,ITF -16 及 ITF-6(附加代码 add-on),他们都是定长型条码。 ITF-14 1.4.30 SSCC 18 用于识别个人海运集装箱。 1.4.31 Swiss PostParcel PostParcel 主要用于包裹的识别。 1.4.32 Telepen Telepen 于 1972 年产生于英国,能表达 128 个不同的 ASCII。 1.4.33 UspsFim UspsFim 是一个识别标志,旨在协助邮件的自动化服务。 1.4.34 Intelligent Mail Intelligent Mail 是 UspsFim 的升级版,用于信件的分类和跟踪。 1.4.35 Usps Sack Label Usps Sack Label 主要用于美国邮政服务。 1.4.36 Usps Tray Label Usps Tray Label 主要用于美国邮政服务。 1.4.37 LOGMARS LOGMARS 是美国说明书条码。 1.4.38 ISMN ISMN (International Standard Music Number) 1.4.39 Leitcode 德国的邮政编码,主要用于德国的邮件母的地的解码。 1.4.40 USPS Facing Identification Mark 只表示有 ABCD,出现的时候只代表其中的一个 一下分别表示 ABCD