效验码的生成问题

题目:

生成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参数的字符串表示附加到此序列。 

 

 

 

 

posted @ 2020-07-17 11:00  <小白>  阅读(401)  评论(0)    收藏  举报