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?

ISBN-10 - Implementacja w Java
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 28 lutego 2006 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.

ISBN_j/ISBNValidator.java:
import java.util.StringTokenizer;

/**
 * @author Tomasz Lubinski
 * www.algorym.org
 * (c) 2006
 *
 * Class for ISBN validating
 */
public class ISBNValidator {
	
	private byte ISBN[] = new byte[10];
	private String country;
	private String publisher;
	private String book;
	private String checkNumber;
	private String additional; 
	private boolean valid = false;
	private static int CountryNo[] = {
		0, 1, 2, 3, 4, 5, 7, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 950, 951, 
		952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 
		969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 
		986, 987, 988, 989, 9946, 9947, 9948, 9949, 9951, 9952, 9953, 9954, 9955, 9956, 9957, 
		9958, 9959, 9960, 9961, 9962, 9963, 9964, 9965, 9966, 9967, 9968, 9970, 9971, 
		9972, 9973, 9974, 9975, 9976, 9977, 9978, 9979, 9980, 9981, 9982, 9983, 9984, 
		9985, 9986, 9987, 9988, 9989, 99901, 99902, 99903, 99904, 99905, 99906, 99908, 
		99909, 99910, 99911, 99912, 99913, 99914, 99915, 99916, 99917, 99918, 99919, 
		99920, 99921, 99922, 99923, 99924, 99925, 99926, 99927, 99928, 99929, 99930, 
		99931, 99932, 99933, 99934, 99935, 99936, 99937, 99938, 99939, 99940, 99941, 99942 
 };
	
	private static String CountryName[] = {
		"Obszar anglojęzyczny: Australia, Kanada, Gibraltar, Irlandia, (Namibia), Nowa Zelandia, Puerto Rico, Republika Południowej Afryki, Swaziland, UK, USA, Zimbabwe", 
		"Obszar anglojęzyczny: Australia, Kanada, Gibraltar, Irlandia, (Namibia), Nowa Zelandia, Puerto Rico, Republika Południowej Afryki, Swaziland, UK, USA, Zimbabwe", 
		"Obszar francuskojęzyczny: Francja, Belgia, Kanada, Luksemburg, Szwajcaria", 
		"Obszar niemieckojęzyczny: Austria, Niemcy, Szwajcaria", "Japonia", 
		"Federacja Rosyjska, Ukraina, Bialoruś, Estonia, Litwa, Kazahstan, Kirgistan, Mołdawia, Łotwa, Georgia, Armenia",
		"Chiny", "Czechy, Słowacja", "Indie", "Norwegia", "Polska", "Hiszpania", "Brazylia", 
		"Bośnia i Hercegowina, Chorwacja, Macedonia, Słowenia", "Dania", 
		"Obszar włoskojęzyczny: Włochy, Szwajcaria", "Korea", "Holandia", "Holandia, Belgia, Szwecja", 
		"Wydawcy międzynarodowi (UNESCO, UE), Organizacje Wspólnoty Europejskiej", "Indie", "Argentyna", 
		"Finlandia", "Finlandia", "Chorwacja", "Bułgaria", "Sri Lanka", "Chile", "Tajwan, Chiny", "Columbia", 
		"Kuba", "Grecja", "Słowenia", "Hong Kong", "Węgry", "Iran", "Izrael", "Ukraina", "Malezja", "Meksyk", 
		"Pakistan", "Meksyk", "Filipiny", "Portugalia", "Rumunia", "Tajlandia", "Turcja", "Karaiby", "Egipt", 
		"Nigeria", "Indonezja", "Wenezuela", "Singapur", "Południowy Pacyfik", "Malezja", "Bangladesz", 
		"Białoruś", "Tajwan, Chiny", "Argentyna", "Hongkonga", "Portugalia", "Korea", "Algieria", "Estonia", 
		"Palestyna", "Kosowo", "Azerbejdżan", "Liban", "Maroko", "Litwa", "Kamerun", "Jordania", 
		"Bośnia i Hercegowina", "Libia", "Arabia Saudyjska", "Algieria", "Panama", "Cypr", "Ghana", 
		"Kazachstan ", "Kenia", "Kirgistan", "Kostaryka", "Uganda", "Singapur", "Peru", "Tunezja", "Urugwaj", 
		"Mołdawia", "Tanzania", "Kostaryka", "Ekwador", "Islandia", "Papua Nowa Gwinea", "Maroko", "Zambia", 
		"Gambia", "Łotwa", "Estonia", "Litwa", "Tanzania", "Ghana", "Macedonia", "Bahrain", "Gabon", 
		"Mauritius", "Antyle Holenderskie", "Boliwia", "Kuwejt", "Malawi", "Malta", "Sierra Leone", 
		"Lesoto", "Botswana", "Andora", "Suriname", "Malediwy", "Namibia", 	"Brunei Darussalam", 
		"Wyspy Faroe", "Benin", "Andora", "Katar", "Gwatemala", "El Salvador", "Nikaragua", "Paragwaj", 
		"Honduras", "Albania", "Georgia", "Mongolia", "Armenia", "Seszele", "Malta", "Nepal", 
		"Republika Dominikany", "Haiti", "Butan", "Makao", "Serbia", "Gwatemala", "Georgia", 
		"Armenia", "Sudan"
	};

	public ISBNValidator(String ISBNNumber) {
		if ((ISBNNumber.length() != 13) && 
			(ISBNNumber.length() != 18)){
			valid = false;
		}
		else {
			StringTokenizer token = new StringTokenizer(ISBNNumber, "-");
			if (token.countTokens() != 4) {
				valid = false;
			}
			else {
				country = token.nextToken();
				publisher = token.nextToken();
				book = token.nextToken();
				checkNumber = token.nextToken();
				
				if ((checkNumber.length() == 6) &&
					(ISBNNumber.length() == 18)) {
					additional = checkNumber.substring(1, 6);
					checkNumber = checkNumber.substring(0, 1);
				}

				try {
					valid = checkSum();
				} catch (Exception e) {
					valid = false;
				}
			}
		}
	}
	
	public boolean isValid() {
		return valid;
	}
	
	private boolean checkSum() {
		boolean result = true;
		int counter = 0;
		int sum = 0;
		
		if (checkNumber.length() != 1) {
			result = false;
		}
		else {
			for (int i=0; i<country.length(); i++) {
				ISBN[counter] = Byte.parseByte(country.substring(i, i+1));
				counter++;
			}
			for (int i=0; i<publisher.length(); i++) {
				ISBN[counter] = Byte.parseByte(publisher.substring(i, i+1));
				counter++;				
			}
			for (int i=0; i<book.length(); i++) {
				ISBN[counter] = Byte.parseByte(book.substring(i, i+1));
				counter++;				
			}
			if (checkNumber.toUpperCase().equals("X")){
				ISBN[counter] = 10;
			} else {
				ISBN[counter] = Byte.parseByte(checkNumber);
			}
			
			for (int i=0; i<9; i++){
				sum += (10-i)*ISBN[i];
			}
			sum %= 11;
			sum = 11 - sum;
			sum %= 11;
			if (ISBN[9] == sum) {
				result = true;
			}
			else {
				result = false;
			}
				
		}
		return result;
	}
	
	
	public String getCountry() {
		String result = "unknown";
		int code = 0;
		
		for (int i=0; i<5; i++){
			
			code *= 10;
			code += ISBN[i];
			
			for (int j=0; j<144; j++) {
				if (CountryNo[j] == code) {
					result = CountryName[j];
					break;
				}
			}
			
			if (!result.equals("unknown")) {
				break;
			}
			
		}
		
		return result;
	}
	
	public String getCountryCode() {
		return country;
	}
	
	public String getPublisherCode() {
		return publisher;
	}
	
	public String getBookCode() {
		return book;
	}	
	
	public String getCheckNumberCode() {
		return checkNumber;
	}
	
	public String getAdditionalCode() {
		return additional;
	}	
}

Dodaj komentarz