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结果就不对 这个是为什么 求解释
展开
 我来答
hitzsf
2014-03-14 · TA获得超过2060个赞
知道大有可为答主
回答量:1741
采纳率:78%
帮助的人:1164万
展开全部

条形码数 最好一位是校验位,是不计入计算的

所以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");
}
}
}
29cyy
2014-03-14 · TA获得超过2186个赞
知道小有建树答主
回答量:2826
采纳率:45%
帮助的人:580万
展开全部
条形码 第13位数字 是根据前边的12位算出来的,所以取出前12个参与运算就可以了。
运算完得到的数字如果与第13位相等就是正确的结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
哒恢狼
2014-03-14 · TA获得超过410个赞
知道小有建树答主
回答量:230
采纳率:0%
帮助的人:185万
展开全部
你的校验规则是什么?
最后一位是校验位,需要参与运算么?
如果要参与运算,那么就小于等于,不要参与运算,就只能小于呗。

刚看了一下校验规则,校验位是不参与运算的,所以不能用小于等于。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式