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

