1、IT 在线教育平台麦子学院 http:/下面来看一篇关于 Android 生成商品条形码的例子,这个生成是利用了 EAN-13 方式来生成了,代码与生成例子都在文章下面有大家可测试一下。简介商品条码,或者 EAN 是欧洲标准条码。该条码被作为商品和商品制造商的唯一标识,同时,是美国标准 UPC 的超集。EAN-13 由前十二位数字和第十三位作为校验位的数字组成。其中第十三位数字由前十二位数字按照一定公式计算得出。如今,各个领域都有条码的应用。如果你以写代码为生,你的程序需要支持条码是早晚的事儿。比如超市的会员打折系统,用户以手机获取的条码作为唯一标识,来获得折扣。又比如支付系统中的星巴克支付系
2、统。本文中,我们将讨论如何在安卓系统中生成 EAN-13 条码。EAN-13 计算基础EAN-13 采用的是是各位商品码,第十三位作为校验位。该校验位有前十二位数字生成。生成校验位的算法如下(数据从左到右计数):P1 = 偶数位的数字和P2 = 奇数位的数字和Z = P1 + 3 * P2R = 取个位数作为 Z 值校验位 = R - Z下面我们看一下 EAN-13 的编码结构 :首位不参与计算随后六位根据首位数字编码末六位以下列规则转换首位 左六位 右六位0 LLLLLL RRRRRR1 LLGLGG RRRRRR2 LLGGLG RRRRRR3 LLGGGL RRRRRRIT 在线教育平台
3、麦子学院 http:/4 LGLLGG RRRRRR5 LGGLLG RRRRRR6 LGGGLL RRRRRR7 LGLGLG RRRRRR8 LGLGGL RRRRRR9 LGGLGL RRRRRR位编码:Digit L - code G - code R - code0 0001101 0100111 11100101 0011001 0110011 11001102 0010011 0011011 11011003 0111101 0100001 10000104 0100011 0011101 10111005 0110001 0111001 10011106 0101111 000
4、0101 10100007 0111011 0010001 10001008 0110111 0001001 10010009 0001011 0010111 1110100应用文章尾部,我贴出了一个用十二位数字生成 EAN-13 条码的类 EAN13CodeBuilder。这个类可以把生成的十三位数字的每一位都替换为可以展示到屏幕的特殊字体。该字体包括了一些特殊字符,比如$,+,!和其如上所述的十个数字的编码 L,R,G。在 EAN-13 条码必须以以下方式生成:起始界定符(取决于第一位数字)-左六位-中间分隔符-右六位-终止符(!)Digit L - code G - code R -co
5、de Start delimiter0 0 A a #!1 1 B b $!2 2 C c %!3 3 D d private String generatedCode;/url : http:/ public EAN13CodeBuilder(String codeString)codeStringValue = codeString;parse();public String getCode()return generatedCode;/ this method generates EAN 13 control number ans returns full / string to enc
6、odeIT 在线教育平台麦子学院 http:/private String getFullCode()int chetVal = 0, nechetVal = 0;String codeToParse = codeStringValue;for( int index = 0;index6;index+ )chetVal += Integer.valueOf(codeToParse.substring(index*2+1,index*2+2).intValue();nechetVal += Integer.valueOf(codeToParse.substring(index*2,index*2
7、+1).intValue();chetVal *= 3;int controlNumber = 10 - (chetVal+nechetVal)%10;if( controlNumber = 10 ) controlNumber = 0;codeToParse += String.valueOf(controlNumber);return codeToParse;private String DigitToUpperCase( String digit)String letters = “ABCDEFGHIJ“;int position = Integer.valueOf(digit).int
8、Value();String retVal = letters.substring(position,position+1);IT 在线教育平台麦子学院 http:/return retVal;private String DigitToLowerCase( String digit)String letters = “abcdefghij“;int position = Integer.valueOf(digit).intValue();String retVal = letters.substring(position,position+1);return retVal;/ this me
9、thod generates EAN 13 encoded string/ algorithm can be found at http:/en.wikipedia.org/wiki/EAN-13private String createEAN13Code(String rawCode)int firstFlag = Integer.valueOf(rawCode.substring(0,1).intValue();String leftString = rawCode.substring(1,7);String rightString = rawCode.substring(7);Strin
10、g rightCode = “;IT 在线教育平台麦子学院 http:/String leftCode = “;for( int i=0;i6;i+)rightCode += DigitToLowerCase( rightString.substring(i,i+1) );if( firstFlag = 0 )leftCode = “#!“+leftString.substring(0,1)+leftString.substring(1,2)+leftString.substring(2,3)+leftString.substring(3,4)+leftString.substring(4,5
11、)+leftString.substring(5);if( firstFlag = 1 )leftCode = “$!“+leftString.substring(0,1)+leftString.substring(1,2)+DigitToUpperCase(leftString.substring(2,3)+leftString.substring(3,4)+DigitToUpperCase(leftString.substring(4,5)+DigitToUpperCase(leftString.substring(5);if( firstFlag = 2 )IT 在线教育平台麦子学院 h
12、ttp:/leftCode = “%!“+leftString.substring(0,1)+leftString.substring(1,2)+DigitToUpperCase(leftString.substring(2,3)+DigitToUpperCase(leftString.substring(3,4)+leftString.substring(4,5)+DigitToUpperCase(leftString.substring(5);if( firstFlag = 3 )leftCode = “if( firstFlag = 4 )leftCode = “!“+leftStrin
13、g.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+leftString.substring(2,3)+leftString.substring(3,4)+DigitToUpperCase(leftString.substring(4,5)+DigitToUpperCase(leftString.substring(5);if( firstFlag = 5 )leftCode = “(!“+leftString.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+
14、DigitToUpperCase(leftString.substring(2,3)IT 在线教育平台麦子学院 http:/+leftString.substring(3,4)+leftString.substring(4,5)+DigitToUpperCase(leftString.substring(5);if( firstFlag = 6 )leftCode = “)!“+leftString.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+DigitToUpperCase(leftString.substring(2,
15、3)+DigitToUpperCase(leftString.substring(3,4)+leftString.substring(4,5)+leftString.substring(5);if( firstFlag = 7 )leftCode = “*!“+leftString.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+leftString.substring(2,3)+DigitToUpperCase(leftString.substring(3,4)+leftString.substring(4,5)+Digit
16、ToUpperCase(leftString.substring(5);if( firstFlag = 8 )leftCode = “+!“+leftString.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+leftString.substring(2,3)+DigitToUpperCase(leftString.substring(3,4)+DigitToUpperCase(leftString.substring(4,5)+leftString.substring(5);IT 在线教育平台麦子学院 http:/if(
17、firstFlag = 9 )leftCode = “,!“+leftString.substring(0,1)+DigitToUpperCase(leftString.substring(1,2)+DigitToUpperCase(leftString.substring(2,3)+leftString.substring(3,4)+DigitToUpperCase(leftString.substring(4,5)+leftString.substring(5);String retVal = leftCode + “-“ + rightCode + “!“;return retVal;p
18、rivate void parse()String fullString = getFullCode();System.out.println( “Full code: “ + fullString );generatedCode = createEAN13Code(fullString);System.out.println( “Generated code: “ + generatedCode );代码IT 在线教育平台麦子学院 http:/为了生成一个在线条码,并将它展示到安卓屏幕上,你可能需要自己生成条码并用其中的特殊字符展示到屏幕上。为了在安卓系统的 TextView 部件中设置字符
19、集,你需要在工程文件的 /assets 下放置一个文件,加载 Typeface 并且设置 Typeface 到TextView 中:代码如下 复制代码import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import android.graphics.Typeface;public class AndroidEAN13Activity extends Activity /* Called when the activity is f
20、irst created. */Overridepublic void onCreate(Bundle icicle) super.onCreate(icicle);/ ToDo add your GUI initialization code herethis.setContentView(R.layout.main);TextView t = (TextView)findViewById(R.id.barcode);/ set barcode font for TextView./ ttf file must be placed is assets/fonts Typeface font = Typeface.createFromAsset(this.getAssets(), “fonts/EanP72Tt Normal.Ttf“);t.setTypeface(font);/ generate barcode string IT 在线教育平台麦子学院 http:/EAN13CodeBuilder bb = new EAN13CodeBuilder(“124958761310“);t.setText(bb.getCode();