EAN 8:如何计算校验和数字?

Ben*_*Ben 11 checksum barcode

我需要以编程方式创建EAN 8条形码.我搜索算法来计算校验和数字.

Pau*_*xon 13

该算法在本维基百科关于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
Run Code Online (Sandbox Code Playgroud)

总数为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;
Run Code Online (Sandbox Code Playgroud)


Sup*_*Pro 8

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;
}
Run Code Online (Sandbox Code Playgroud)


小智 7

抱歉重新开放

JAVA VERSION

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;
    }
Run Code Online (Sandbox Code Playgroud)