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-8 - Implementacja w Java
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 08 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
 *
 *  EAN8 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}
	        };
	
	public byte[] convert(byte EAN8[]) {
		
		/* inccorect length or check sum, return null */
		if ((EAN8 == null) ||
			(EAN8.length != 8) || 
			(checkSum(EAN8) == false)) {
			return null;
		}
		
		byte bars[] = new byte[67];
        for (int i=0; i<67; i++) {
            bars[i] = 0;
        }

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

        for (int i=0; i<4; i++) {
            	for (int j=0; j<7; j++) {
                    	bars[i*7 + 3 + j] = left[EAN8[i]][j];
            	}
        }

        bars[31] = 0;
        bars[32] = 1;
        bars[33] = 0;
        bars[34] = 1;
        bars[35] = 0;

        for (int i=4; i<8; i++) {
            	for (int j=0; j<7; j++) {
                    	bars[(i-4)*7 + 36 + j] = right[EAN8[i]][j];
            	}
        }

        bars[64] = 1;
        bars[65] = 0;
        bars[66] = 1;       
        
		return bars;
	}
	
	/**
	 * calculates checksum of EAN8
	 */
	private boolean checkSum(byte EAN8[]) {
        int sum = 0;
        int sum_even = 0;
        int sum_uneven = 0;
        int i;

        for (i=1; i<7; i+=2) {
                sum_uneven += EAN8[i];
        }
        for (i=0; i<7; i+=2) {
                sum_even += EAN8[i];
        }
        sum = sum_uneven + 3*sum_even;
        sum %= 10;
        sum = 10 - sum;
        sum %= 10;

        if (EAN8[7] == sum) {
                return true;
        }
        else {
                return false;
        }
	}
}
Dodaj komentarz