algorytm.org

ISBN-10

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
Ocena użytkowników:***** / 1
SłabyŚwietny 
Wpisany przez Tomasz Lubiński, 28 lutego 2006 22:08

System ISBN-10, zwany początkowowo poprostu ISBN, powstał w Wielkiej Brytanii w 1966. W Polsce został przyjęty w 1974 roku. Był on używany do 31 grudnia 2006 roku. Od 1 stycznia 2007 roku książki oznaczane są wyłącznie numerem ISBN-13.
Numer ISBN-10 (ang. International Standard Book Number) służy do oznaczania książek. Ma on następującą strukturę:
  • identyfikator kraju/języka (1-5 znaków),
  • separator '-',
  • identyfikator wydawcy (przynajmniej 1 znak),
  • separator '-',
  • identyfikator tytułu (przynajmniej 1 znak),
  • separator '-',
  • suma kontrolna ISBN (jedna cyfra lub znak 'X'),
  • dodatkowe informacje - opcjonalnie (5 cyfr).
Cały numer składać musi się z 10 cyfr (+ ewentualne 5 cyfr na dodatkowe informacje). Rozmiary poszczególnych części w identyfikatorze ISBN-10 nie są stałe. I tak, mały wydawca będzie miał długi numer wydawcy i krótszy numer oznaczający książkę. Natomiast duży wydawca będzie miał krótszy numer wydawcy i więcej miejsca na numer książki. Jeżeli danemu wydawcy wyczerpie się pula numerów książki to przyznawany jest mu nowy numer wydawcy.
Należy zwrócić uwagę iż odseparowywanie kolejnych części numeru ISBN-10 pozwala łatwo zorientować się, gdzie zaczynają się kolejne pola, ale nawet bez separatorów '-' możliwe byłoby wyznaczenie kodów kraju/wydawcy/książki. Dzieje się tak, gdyż raz wykorzystanego kodu nie wykorzystuje się jako prefiksu innego. I tak np numer 2 oznacza obszar francuskojęzyczny i żaden inny kod kraju nie zaczyna się na 2. Podobnie 83 oznacza Polskę, ale nie ma innych kodów kraju zaczynających się od 83.
Dodatkowe 5 cyfr w numerze ISBN-10 może oznaczać cenę zakodowaną w następujący sposób. Pierwsza cyfra oznacza walutę (patrz tabela poniżej), 4 kolejne cyfry oznaczają cenę pomnożoną razy 100. Wynika z tego że kod: 51234 oznaczać będzie cenę: 12.34$. Kod o końcówce 9999 oznacza cenę 99.99 lub większą.

pierwsza
cyfra
waluta
0GBP - funt brytyjski
1GBP - funt brytyjski
3$ - dolar australijski
4$ - dolar nowozelandzki
5$ - dolar amerykański
6$ - dolar kanadyjski


Obliczanie cyfry kontrolnej dla identyfikatora ISBN-10 przebiega następująco. Kolejne 9 cyfr numeru mnożymy przez wagi: 10, 9, 8, 7, 6, 5, 4, 3, 2 i sumujemy ze sobą. Wynik dzielimy modulo 11, a następnie wynik ten odejmujemy od 11 i dzielimy znów modulo 11. Jeżeli wynik ma wartość 10 to znakiem kontrolnym jest 'X', w przeciwnym wypadku znakiem kontrolnym jest wyznaczona liczba.

Przykład:

Sprawdźmy czy numer (z opcjonalnymi pięcioma cyframi): 83-87347-42-6 50500 jest prawidłowy.
Kolejne cyfry numeru należy zatem przemnożyć przez odpowiednie wagi i dodać do siebie.
10*8 + 9*3 + 8*8 + 7*7 + 6*3 + 5*4 + 4*7 + 3*4 + 2*2 = 80 + 27 + 64 + 49 + 18 + 20 + 28 + 12 + 4 = 302.
Teraz dzielimy ten wynik modulo 11.
302 mod 11 = 5.
Następnie wynik ten odejmujemy od 11.
11 - 5 = 6.
I znów dzielimy modulo 11.
6 mod 11 = 6.
Cyfra kontrolna to 6 zatem numer jest prawidłowy.

Rozważmy jeszcze jeden numer (bez dodatkowych cyfr): 83-09-01550-X.
A więc najpierw suma ważona:
10*8 + 9*3 + 8*0 + 7*9 + 6*0 + 5*1 + 4*5 + 3*5 + 2*0 = 80 + 27 + 0 + 63 + 0 + 5 + 20 + 15 + 0 = 210.
Teraz dzielimy ten wynik modulo 11.
210 mod 11 = 1.
Następnie wynik ten odejmujemy od 11.
11 - 1 = 10.
I znów dzielimy modulo 11.
10 mod 11 = 10.
Suma kontrolna to 10 a więc znakiem kontrolnym powinien być 'X', i tak jest też w rzeczywistości zatem i ten numer jest prawidłowy.

Implementacje
AutorJęzyk
programowania
KomentarzOtwórzPobierzOcena
Tomasz LubińskiC/C++
.cpp
.cpp
***** / 2
Tomasz LubińskiDelphi/Pascal
.pas
.pas
***** / 1
Tomasz LubińskiJava
.java
.java
***** / 1
 
Dodaj własną implementację tego algorytmu
  • Zaloguj się na stronie
Plik:
Język
programowania:
Komentarz:
  By móc dodać implementacje zaloguj się na stronie



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