java 13位条形码的问题
classtest9{publicstaticvoidmain(String[]args){Stringen13="6911989107458";inta=0;intb=...
class test9
{
public static void main(String[] args)
{
String en13 = "6911989107458";
int a = 0;
int b = 0;
for(int i=0;i<12;i++){
int num = en13.charAt(i)-'0';
if(i%2==0){
a+=num;
}else{
b+=num;
}
}
int sum = a+b*3;
int c = sum%10;
int d = 10-c;
System.out.println(d);
if(d==en13.charAt(12)-'0'){
System.out.println("OK");
}else{
System.out.println("NO");
}
}
}
这里for 循环i<12从0循环到11一共取了12位 没有取第13位 但是输出结果是对的 如果小于=12结果就不对 这个是为什么 求解释 展开
{
public static void main(String[] args)
{
String en13 = "6911989107458";
int a = 0;
int b = 0;
for(int i=0;i<12;i++){
int num = en13.charAt(i)-'0';
if(i%2==0){
a+=num;
}else{
b+=num;
}
}
int sum = a+b*3;
int c = sum%10;
int d = 10-c;
System.out.println(d);
if(d==en13.charAt(12)-'0'){
System.out.println("OK");
}else{
System.out.println("NO");
}
}
}
这里for 循环i<12从0循环到11一共取了12位 没有取第13位 但是输出结果是对的 如果小于=12结果就不对 这个是为什么 求解释 展开
展开全部
条形码数 最好一位是校验位,是不计入计算的
所以for循环只取到倒数第二位才是正确的
按照条形码数的定义,写会比较直观
找了一个12位的条形码,修改了一下,字符串校验通过方法获得,没有写死,也适用
public class test9
{
public static void main(String[] args)
{
String en13 = "693461310001";
// String en13 = "6901020709017";
// String en13 = "9771671216014";
// String en13 = "6911989107458";
int a = 0;
int b = 0;
int cout = 1;
for(int i = en13.length() -1 -1 ; i >= 0; i--){
int num = en13.charAt(i)-'0';
if((cout%2)==0){
a+=num;
}else{
b+=num;
}
cout ++;
}
System.out.println(b);
System.out.println(a);
int sum = a+b*3;
System.out.println(sum);
int c = sum%10;
int d = 10-c;
System.out.println(d);
if(d==en13.charAt(en13.length() - 1)-'0'){
System.out.println("OK");
}else{
System.out.println("NO");
}
}
}
展开全部
条形码 第13位数字 是根据前边的12位算出来的,所以取出前12个参与运算就可以了。
运算完得到的数字如果与第13位相等就是正确的结果
运算完得到的数字如果与第13位相等就是正确的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的校验规则是什么?
最后一位是校验位,需要参与运算么?
如果要参与运算,那么就小于等于,不要参与运算,就只能小于呗。
刚看了一下校验规则,校验位是不参与运算的,所以不能用小于等于。
最后一位是校验位,需要参与运算么?
如果要参与运算,那么就小于等于,不要参与运算,就只能小于呗。
刚看了一下校验规则,校验位是不参与运算的,所以不能用小于等于。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询