效验码的生成问题
题目:
生成13位条形码
Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
例如:690123456789
计算其校验码的过程为:
① 前十二位的奇数位和6+0+2+4+6+8=26
② 前十二位的偶数位和9+1+3+5+7+9=34
③ 将奇数和与偶数和的三倍相加26+34*3=128
④ 取结果的个位数:128的个位数为8
⑤ 用10减去这个个位数10-8=2
所以校验码为2
(注:如果取结果的个位数为0,那么校验码不是为10(10-0=10),而是0)
实现上述代码的功能,计算验证码,输入12位条码,返回带验证码的条码。
思路:
1、前十二位的偶数位咋表示?
for(int i=0;i<12;i+=2) { //StringBuffer:charAt:返回 char在指定索引在这个序列值。 c1+=(code.charAt(i)-'0'); }
2、前十二位的奇数位咋表示?
for(int i=0;i<12;i+=2) { //StringBuffer:charAt:返回 char在指定索引在这个序列值。 c2+=(code.charAt(i+1)-'0'); }
3、取一个数的个位上的数?
这个数%10=个数
代码:
1 package demo; 2 3 import java.util.Scanner; 4 5 public class Test12 { 6 /* 7 * 生成13位条形码 8 * Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码 9 * 10 */ 11 12 public static void main(String[] args) { 13 StringBuffer code; 14 int check; 15 System.out.println("请输入Ean-32条形码的前十二位:"); 16 Scanner sc = new Scanner(System.in); 17 code =new StringBuffer(sc.nextLine()); 18 check = ean(code); 19 code.append(check); 20 System.out.println("正确的条形码是:"+code); 21 22 } 23 24 public static int ean(StringBuffer code) { 25 int c1=0; 26 int c2=0; 27 int sum=0; 28 int check; 29 for(int i=0;i<12;i+=2) { 30 //StringBuffer:charAt:返回 char在指定索引在这个序列值。 31 c1+=(code.charAt(i)-'0'); 32 c2+=(code.charAt(i+1)-'0'); 33 } 34 35 sum=c1+c2*3; 36 check=(10-sum%10)%10; 37 return check; 38 } 39 40 }
注意:
1、当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
2、
StringBuffer |
append(char c)
将
char 参数的字符串表示附加到此序列。 |