java流程控制——30题练习题(27题)

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);
		
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoerPerfect

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值