Nadesłany przez Tomasz Lubiński, 27 grudnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
BarCode.java:
/**
* @author Tomasz Lubinski
* (c)2005 algorytm.org
*
* EAN2 Bar Code
*/
public class BarCode {
private static final byte parityTable[][] = {
{0, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 1, 1},
{0, 0, 1, 1, 0, 1},
{0, 0, 1, 1, 1, 0},
{0, 1, 0, 0, 1, 1},
{0, 1, 1, 0, 0, 1},
{0, 1, 1, 1, 0, 0},
{0, 1, 0, 1, 0, 1},
{0, 1, 0, 1, 1, 0},
{0, 1, 1, 0, 1, 0}
};
private static final byte right[][] = {
{1, 1, 1, 0, 0, 1, 0},
{1, 1, 0, 0, 1, 1, 0},
{1, 1, 0, 1, 1, 0, 0},
{1, 0, 0, 0, 0, 1, 0},
{1, 0, 1, 1, 1, 0, 0},
{1, 0, 0, 1, 1, 1, 0},
{1, 0, 1, 0, 0, 0, 0},
{1, 0, 0, 0, 1, 0, 0},
{1, 0, 0, 1, 0, 0, 0},
{1, 1, 1, 0, 1, 0, 0}
};
private static final byte left[][][] = {
{
{0, 0, 0, 1, 1, 0, 1},
{0, 0, 1, 1, 0, 0, 1},
{0, 0, 1, 0, 0, 1, 1},
{0, 1, 1, 1, 1, 0, 1},
{0, 1, 0, 0, 0, 1, 1},
{0, 1, 1, 0, 0, 0, 1},
{0, 1, 0, 1, 1, 1, 1},
{0, 1, 1, 1, 0, 1, 1},
{0, 1, 1, 0, 1, 1, 1},
{0, 0, 0, 1, 0, 1, 1}
},
{
{0, 1, 0, 0, 1, 1, 1},
{0, 1, 1, 0, 0, 1, 1},
{0, 0, 1, 1, 0, 1, 1},
{0, 1, 0, 0, 0, 0, 1},
{0, 0, 1, 1, 1, 0, 1},
{0, 1, 1, 1, 0, 0 ,1},
{0, 0, 0, 0, 1, 0, 1},
{0, 0, 1, 0, 0, 0 ,1},
{0, 0, 0, 1, 0, 0, 1},
{0, 0, 1, 0, 1, 1, 1}
}
};
private static final byte checksumTable[][] = {
{0, 0},
{0, 1},
{1, 0},
{1, 1}
};
public byte[] convert(byte EAN2[]) {
/* inccorect length or check sum, return null */
if ((EAN2 == null) ||
(EAN2.length != 2)) {
return null;
}
byte bars[] = new byte[20];
for (int i=0; i<20; i++) {
bars[i] = 0;
}
int addCheckSum = EAN2[0]*10 + EAN2[1];
addCheckSum %= 4;
bars[0] = 1;
bars[1] = 0;
bars[2] = 1;
bars[3] = 1;
for (int i=0; i<2; i++) {
for (int j=0; j<7; j++) {
bars[i*9 + 4 + j] = left[checksumTable[addCheckSum][i]][EAN2[i]][j];
}
if (i<1) {
bars[i*9 + 11] = 0;
bars[i*9 + 12] = 1;
}
}
return bars;
}
}

