algorytm.org

Implementacja w Java

Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

EAN-5 - Implementacja w Java
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
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
 *
 *  EAN5 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[][] = {
	        {1, 1, 0, 0, 0},
	        {1, 0, 1, 0, 0},
	        {1, 0, 0, 1, 0},
	        {1, 0, 0, 0, 1},
	        {0, 1, 1, 0, 0},
	        {0, 0, 1, 1, 0},
	        {0, 0, 0, 1, 1},
	        {0, 1, 0, 1, 0},
	        {0, 1, 0, 0, 1},
	        {0, 0, 1, 0, 1}
	        };
	
	public byte[] convert(byte EAN5[]) {
		
		/* inccorect length or check sum, return null */
		if ((EAN5 == null) ||
			(EAN5.length != 5)) {
			return null;
		}
		
		byte bars[] = new byte[47];
		for (int i=0; i<47; i++) {
            bars[i] = 0;
		}

		bars[0] = 1;
		bars[1] = 0;
		bars[2] = 1;
		bars[3] = 1;

		int addCheckSum =  3*EAN5[0] + 3*EAN5[2] + 3*EAN5[4];
		addCheckSum += 9*EAN5[1] + 9*EAN5[3];
		addCheckSum %= 10;

		for (int i=0; i<5; i++) {
            for (int j=0; j<7; j++) {
                    bars[i*9 + 4 + j] = left[checksumTable[addCheckSum][i]][EAN5[i]][j];
            }
            if (i<4) {
                    bars[i*9 + 11] = 0;
                    bars[i*9 + 12] = 1;
            }
		}

		return bars;
	}
}
Dodaj komentarz