当前位置:网站首页>每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
每日练习------生成13位条形, Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
2022-07-30 16:41:00 【北柠陌语】
题目:
生成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)
实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。
例:输入:692223361219输出:6922233612192
解题关键:12个数字需要一个个单独输出,然后进行单独判断,最后再进行校验数的判断
思路:1)依次输入12位数字
2)创建一个long类型来包含输入的数字
3)把输入的数字加入long类型
4)判断输入的数字
5)输出12位数字
6)判断第13位的校验数
7)第十三位数加入long类型中
过程: 接下来我们根据我们的解题思路来一步步写代码
1)依次输入12位数字
Scanner sc = new Scanner(System.in);
System.out.println("请您依次12位条码:");
int sumOuShuWei = 0;
int sumJiShuWei= 0;
2)创建一个long类型来包含输入的数字
long all12 = 0L;
for(int i = 1; i < 13; i++){
System.out.println("请您输入第" + i + "位数字");
int num = sc.nextInt();
3)把输入的数字加入long类型
all12 = all12 * 10l + (long)num;
4)判断输入的数字
if(num<0||num>9){
System.out.println("请输入0~9直接的整数");
}
if(num %2 == 0){
sumJiShuWei+= num;
}else{
sumOuShuWei += num;
}
}
5)输出12位数字
System.out.println("12数位:" + all12);
6)判断第13位的校验数
int sumJiOu = sumJiShuWei+sumOuShuWei*3;
int geWei = sumJiOu % 10;
int jiaoYanMa = 0;
if(geWei != 0){
jiaoYanMa = 10 -geWei;
}
7)第十三位数加入long类型中
all12 = all12*10 + jiaoYanMa;
System.out.println("13位数位:" + all12);
完整结果如下:

为了方便大家使用,下面附上源码:
//1)依次输入12位数字
Scanner sc = new Scanner(System.in);
System.out.println("请您依次12位条码:");
int sumOuShuWei = 0;
int sumJiShuWei= 0;
//2)创建一个long类型来包含输入的数字
long all12 = 0L;
for(int i = 1; i < 13; i++){
System.out.println("请您输入第" + i + "位数字");
int num = sc.nextInt();
//3)把输入的数字加入long类型
all12 = all12 * 10l + (long)num;
//4)判断输入的数字
if(num<0||num>9){
System.out.println("请输入0~9直接的整数");
}
if(num %2 == 0){
sumJiShuWei+= num;
}else{
sumOuShuWei += num;
}
}
//5)输出12位数字
System.out.println("12数位:" + all12);
//6)判断第13位的校验数
int sumJiOu = sumJiShuWei+sumOuShuWei*3;
int geWei = sumJiOu % 10;
int jiaoYanMa = 0;
if(geWei != 0){
jiaoYanMa = 10 -geWei;
}
//7)第十三位数加入long类型中
all12 = all12*10 + jiaoYanMa;
System.out.println("13位数位:" + all12);总结:
这道题目的关键在于依次输入12个数字,当然了肯定还有更简单的方法来写这道题目,这道题我的解法使用一个long类型来接受数据,用嵌入循环来写的这道题.
明日练习:随机产生一个1-100之间的整数,看能几次猜中。要求:猜的次数不能超过7次,每次猜完之后都要提示“大了”或者“小了”。
大家可以自己写写,明天中午12点我准时发出我的写法哦,明天12点不见不散
一生朋友一生情,一生有你才会赢;千山万水总是情,点个关注行不行!

边栏推荐
猜你喜欢
随机推荐
服务器装好系统的电脑怎么分区
武汉星起航跨境电商有前景吗?亚马逊的未来趋势如何发展?
swagger使用教程——快速使用swagger
FME's scheme and operation process for reading and writing cass data
Lotus 1.16.0 minimum snapshot export import
Public Key Retrieval is not allowed error solution
绕开驱动层检测的无痕注入
C#西门子S7 协议通过偏移量的方式读写PLC DB块
onenote use
Go新项目-编译热加载使用和对比,让开发更自由(3)
详解最实用的几种dll注入方式
Qt 容器控件Tool Box 使用详解
安全业务收入增速超70% 三六零筑牢数字安全龙头
DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计
归一化与标准化
vivo宣布延长产品保修期限 系统上线多种功能服务
Chapter 6: Decisive Autumn Moves
PCIE入门
3D激光SLAM:LeGO-LOAM论文解读---激光雷达里程计与建图
Discuz magazine/news report template (jeavi_line) UTF8-GBK template









