我需要以编程方式创建EAN 8条码。我搜索一个算法来计算校验和数字。
发布于 2009-07-16 10:26:48
int checkSum(const std::vector<int>& code) const
{
if (code.size() < 8) return false;
for( SIZE_T i = 0; i< code.size(); i++ )
{
if( code[i] < 0 ) return false;
}
int sum1 = code[1] + code[3] + code[5]
int sum2 = 3 * (code[0] + code[2] + code[4] + code[6]);
int checksum_value = sum1 + sum2;
int checksum_digit = 10 - (checksum_value % 10);
if (checksum_digit == 10) checksum_digit = 0;
return checksum_digit;
}发布于 2009-07-16 10:18:37
本wikipedia article on EAN介绍了该算法,请注意,EAN-8的计算方式与EAN-13的计算方式相同。
下面是一个来自http://www.barcodeisland.com/ean8.phtml的工作示例:
假设我们希望对7位数的消息"5512345“进行编码,我们将按以下方式计算校验和:
Barcode 5 5 1 2 3 4 5
Odd/Even Pos? O E O E O E O
Weighting 3 1 3 1 3 1 3
Calculation 5*3 5*1 1*3 2*1 3*3 4*1 5*3
Weighted Sum 15 5 3 2 9 4 15总数是15 +5+3+2+9+4+ 15 = 53。必须将7与53相加,才能产生一个可被10整除的数字,因此校验和数字为7,完整的条形码值为"55123457“。
string code="55123457";
int sum1 = code[1] + code[3] + code[5]
int sum2 = 3 * (code[0] + code[2] + code[4] + code[6]);
int checksum_value = sum1 + sum2;
int checksum_digit = 10 - (checksum_value % 10);
if (checksum_digit == 10)
checksum_digit = 0;发布于 2012-10-04 03:26:47
很抱歉重新开通
JAVA版本
public int checkSum(String code){
int val=0;
for(int i=0;i<code.length();i++){
val+=((int)Integer.parseInt(code.charAt(i)+""))*((i%2==0)?1:3);
}
int checksum_digit = 10 - (val % 10);
if (checksum_digit == 10) checksum_digit = 0;
return checksum_digit;
}https://stackoverflow.com/questions/1136642
复制相似问题