java-关于商品条码正确性校验的分析与实践

java-关于商品条码正确性校验的分析与实践

本方法仅适用于13位数字条码、8位数字条码(缩短码是由7位商品代码和1位校验码构成的8位数字的条码)

	/*  代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)
	 *  a. 从代码位置序号2开始,所有偶数位的数字代码求和。 
	 *  b. 将步骤a的和乘以3。 
	 *  c. 从代码位置序号3开始,所有奇数位的数字代码求和。 
	 *  d. 将步骤b与步骤c的结果相加。 
	 *  e. 用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验码的值。
	 *  概括:从右到左,偶数位之和乘以3加上奇数位之和(校验码位不算),再求总和的10的余数,用10减去余数,即获得校验码,对比即可判断是否正确
	 */
 protected static boolean isBarCode(String barCode) {

		if (barcode == null  || !barcode.matches("\\d+") || (barcode.length() != 8 && barcode.length() != 13)) {
            return false; //条码为空--或--含有非数字字符--或--长度不对,不等于8也不等于13
        }
	    barcode = new StringBuilder(barcode).reverse().toString();//将条码字符串倒序转换
		int check_num = 0;//校验码
		int sum = 0;//求和结果
		for (int i = 0; i < barcode.length(); i++) {
			if (i==0) {//转换后,第一个数就是校验码
				check_num = Integer.parseInt(barcode.substring(i, i + 1));
			}else {
				int num = Integer.parseInt(barcode.substring(i, i + 1));
				sum += (i % 2 == 0) ? num : num * 3; // 转换后,变成了-->偶数位数字求和--加上--奇数位数字求和乘以3
			}
		}
		int check_num_result = 10 - sum % 10; // 计算出的校验码
		if (check_num_result == 10) {
			check_num_result = 0; // 如果校验码是10,则用0表示
		}
		return check_num==check_num_result;
	}

链接: 中国物品编码中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值