An EAN13 barcode has a built-in checksum to help cash registers discover damaged barcodes. You can easily check these checksums by hand.
| Standard |
Digit positions |
| EAN-8 |
|
|
|
|
|
|
|
|
|
|
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
| EAN-12 |
|
|
|
|
|
|
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
N11 |
N12 |
| EAN-13 |
|
|
|
|
|
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
N11 |
N12 |
N13 |
| EAN-14 |
|
|
|
|
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
N11 |
N12 |
N13 |
N14 |
| SSCC |
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
N11 |
N12 |
N13 |
N14 |
N15 |
N16 |
N17 |
N18 |
| Step 1: Multiply value of each position by |
|
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
x1 |
x3 |
|
| Step 2: Add results together to create sum |
| Step 3: Subtract the sum from nearest equal or higher multiple of ten = Check Digit |
The following table gives an example to illustrate how a Check Digit is calculated:
| Pos |
N1 |
N2 |
N3 |
N4 |
N5 |
N6 |
N7 |
N8 |
N9 |
N10 |
N11 |
N12 |
N13 |
| Number without Check Digit |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
2 |
3 |
- |
| Step 1: Multiply |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
- |
| by |
1 |
3 |
1 |
3 |
1 |
3 |
1 |
3 |
1 |
3 |
1 |
3 |
- |
| Step 2: Add results |
= |
= |
= |
= |
= |
= |
= |
= |
= |
= |
= |
= |
- |
| to create sum |
1 |
6 |
3 |
12 |
5 |
18 |
7 |
24 |
9 |
3 |
2 |
9 |
= 91
|
| Step 3: Subtract the sum from nearest equal or higher multiple of ten = 100-99 = 1 |
| Number with Check Digit |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
1 |
2 |
3 |
1 |
My PHP code to check the CRC code:
function ean13_check_digit($digits){
$digits=preg_split("//",$digits,-1,PREG_SPLIT_NO_EMPTY);
$a=$b=0;
for($i=0;$i<6;$i++){
$a+=(int)array_shift($digits);
$b+=(int)array_shift($digits);
}
$total=($a*1)+($b*3);
$nextten=ceil($total/10)*10;
return $nextten-$total==array_shift($digits);
}
echo ean13_check_digit('1234567891231')?"good":"wrong";
echo ean13_check_digit('1234567891232')?"good":"wrong";
echo ean13_check_digit('1234567891233')?"good":"wrong";
echo ean13_check_digit('1234567891234')?"good":"wrong";
echo ean13_check_digit('1234567891235')?"good":"wrong";
echo ean13_check_digit('1234567891236')?"good":"wrong";
echo ean13_check_digit('1234567891237')?"good":"wrong";
© GeekLabInfo