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-14 - Implementacja w Java
Ocena użytkownikóww: *****  / 2
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 01 września 2007 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.

EAN14.java:
//Konwersja EAN13 <=> EAN14
//www.algorytm.org
//(c) 2007 by Tomasz Lubinski

public class EAN14 {

	/**
	 * Converts EAN-13 to EAN-14
	 * @param ean13 - to convert
	 * @param variant - variant of EAN-13
	 * @return EAN-14
	 */
	public static String ConvertToEAN14(String ean13, int variant) {
		byte EAN[] = new byte[14];
		
		//check length of ean-13
		if (ean13.length() != 13) {
			return "Nieprawidlowa dlugosc EAN-13 (powinno byc 13 cyfr)";
		}
		
		//check variant
		if (variant < 0 || variant > 9) {
			return "Nieprawidlowa wartosc wariantu (powinno byc 0-9)";
		}
		
		//parse EAN 13 code
		for (int i = 0; i < 13; i++){
			EAN[i] = Byte.parseByte(ean13.substring(i, i+1));
		}	
		
		//check checksum
		if (EAN[12] != checkSum13(EAN)) {
			return "Nieprawidlowa wartosc cyfry kontrolnej EAN-13";
		}		
		
		//generate EAN-14
		for (int i=11; i>=0; i--) {
			EAN[i+1] = EAN[i];
		}
		EAN[0] = (byte)variant;
		EAN[13] = checkSum14(EAN);
		
		String result = "";
		for (int i=0; i<14; i++) {
			result += EAN[i];
		}
		
		return result;
	}

	/**
	 * Converts EAN-14 to EAN-13
	 * @param ean14 - to convert
	 * @return EAN-13
	 */
	public static String ConvertToEAN13(String ean14) {
		byte EAN[] = new byte[14];
		
		//check length of ean-14
		if (ean14.length() != 14) {
			return "Nieprawidlowa dlugosc EAN-14 (powinno byc 14 cyfr)";
		}
		
		//parse EAN 14 code
		for (int i = 0; i < 14; i++){
			EAN[i] = Byte.parseByte(ean14.substring(i, i+1));
		}	
		
		//check checksum
		if (EAN[13] != checkSum14(EAN)) {
			return "Nieprawidlowa wartosc cyfry kontrolnej EAN-14";
		}	
		
		//generate EAN-13
		for (int i=0; i<12; i++) {
			EAN[i] = EAN[i+1];
		}
		EAN[12] = checkSum13(EAN);
		
		String result = "";
		for (int i=0; i<13; i++) {
			result += EAN[i];
		}
		
		return result;
	}	
	
	
	/**
	 * calculates checksum of EAN13
	 */
	private static byte checkSum13(byte EAN[]) {
		int sum = 1 * EAN[0] + 
		          3 * EAN[1] +
				  1 * EAN[2] +
				  3 * EAN[3] +
				  1 * EAN[4] +
				  3 * EAN[5] +
				  1 * EAN[6] +
				  3 * EAN[7] +
				  1 * EAN[8] +
				  3 * EAN[9] +
				  1 * EAN[10] +
				  3 * EAN[11];
        sum %= 10;
        sum = 10 - sum;
        sum %= 10;
        
        return (byte) sum;
	}
	
	/**
	 * calculates checksum of EAN14
	 */
	private static byte checkSum14(byte EAN[]) {
		
		int sum = 3 * EAN[0] +
			      1 * EAN[1] + 
		          3 * EAN[2] +
				  1 * EAN[3] +
				  3 * EAN[4] +
				  1 * EAN[5] +
				  3 * EAN[6] +
				  1 * EAN[7] +
				  3 * EAN[8] +
				  1 * EAN[9] +
				  3 * EAN[10] +
				  1 * EAN[11] +
				  3 * EAN[12];
        sum %= 10;
        sum = 10 - sum;
        sum %= 10;
        
        return (byte) sum;
	}	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String ean13;
		String ean14;
		int variant, i;
		
		System.out.println("1. EAN-13 => EAN-14");
		System.out.println("2. EAN-14 => EAN-13");
		i = Console.readInt("");
		
		if (i==1) {
			System.out.println("Podaj kod EAN-13");
			ean13 = Console.readString();
			System.out.println("Podaj wariant");
			variant = Console.readInt("");
			
			ean14 = ConvertToEAN14(ean13, variant);
			System.out.println("Kod EAN-14 to:");
			System.out.println(ean14);
		}
		else {
			System.out.println("Podaj kod EAN-14");
			ean14 = Console.readString();
			
			ean13 = ConvertToEAN13(ean14);
			System.out.println("Kod EAN-13 to:");
			System.out.println(ean13);
		}
	}
}
Dodaj komentarz