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); } } }