27、 生成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位条码,返回带验证码的条码。
例:输入:692223361219输出:6922233612192
public class Exer27 {
public static void main(String[] args){
//获取12位的随机数(int型超过9位就超出限制了,因此这里用long来初始化变量)
long num = (long)(Math.random() * 900000000000L + 100000000000L);
System.out.println(num);
// String s = String.valueOf(num);//将long型变量转化为字符串,为后续提取奇、偶位做准备
// System.out.println(s);
//
long oddBitsum = 0;//奇数位
long evenBitsum = 0;//偶数位
// for(int i = 0;i < 12;i += 2){
// char m = s[i];
// }
// System.out.println(oddBitsum);
//
// for(int i = 1;i < 13;i += 2){
// evenBitsum += s[i];
// }
long n12 = num % 10;//第12位
System.out.println(n12);
long n11 = num % 100 / 10;//第11位
System.out.println(n11);
long n10 = num % 1000 / 100;//第10位
System.out.println(n10);
long n9 = num % 10000 / 1000;//第9位
System.out.println(n9);
long n8 = num % 100000 / 10000;//第8位
System.out.println(n8);
long n7 = num % 1000000 / 100000;//第7位
System.out.println(n7);
long n6 = num % 10000000 / 1000000;//第6位
System.out.println(n6);
long n5 = num % 100000000 / 10000000;//第5位
System.out.println(n5);
long n4 = num % 1000000000 / 100000000;//第4位
System.out.println(n4);
long n3 = num % 10000000000L / 1000000000;//第3位
System.out.println(n3);
long n2 = num % 100000000000L / 10000000000L;//第2位
System.out.println(n2);
long n1 = num / 100000000000L;//第1位
System.out.println(n1);
oddBitsum = n1 + n3 + n5 + n7 + n9 + n11;//①
System.out.println("奇数位和:" + oddBitsum);
evenBitsum = n2 + n4 + n6 + n8 + n10 + n12;//②
System.out.println("偶数位和:" + evenBitsum);
long sum = oddBitsum + evenBitsum * 3;//③
System.out.println("奇偶和:" + sum);
long gewei = sum % 10;//④
System.out.println("个位:" + gewei);
long jiaoyanma = (10 - gewei) % 10;//⑤
System.out.println("校验码:" + jiaoyanma);
String s1 = String.valueOf(num);//将获取的12位随机数long型变量,转化为字符串
String s2 = String.valueOf(jiaoyanma);//将校验码转换为字符串
String s = s1 + s2;//将两个字符串连接在一起
System.out.println(s);
}
}