User Tools

Site Tools


isbn-13

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
isbn-13 [01/12/2006 17:14]
fernando
isbn-13 [29/11/2010 15:51]
fernando
Line 1: Line 1:
 +====== ISBN 13 ======
  
 +==== Algunos documentos para entender la nueva situación ====
 +
 +  * [[http://​www.loc.gov/​catdir/​cpso/​13digit.html|Library of Congress plan to accommodate 13-digit ISBN]]
 +
 +  * [[http://​www.ariadne.ac.uk/​issue41/​chapman/​|ISBN-13:​ New Number on the Block]]
 +
 +  * [[http://​www.isbn-international.org/​en/​manual.html|ISBN Users' Manual]]
 +
 +  * [[http://​www.oclc.org/​news/​announcements/​announcement96.htm|OCLC Interim Support for ISBN 13]]
 +
 +  * [[http://​www.isbn-international.org/​en/​download/​implementation-guidelines-04.pdf|Guidelines for the implementation of 13-digit ISBNs]] (pdf)
 +
 +
 +==== Herramientas ====
 +
 +
 +  * [[http://​pcn.loc.gov/​isbncnvt.html|ISBN Converter (LC)]], incluye algoritmo para generar guiones (aparentemente incompleto):​ http://​pcn.loc.gov/​Templates/​isbncnvt.js
 +
 +Pego aquí el código JS por las dudas:
 +
 +<code javascript>​
 +// **************************************************************
 +// Validation/​conversion functions for ISBN numbers
 +
 +var bAlert;
 +
 +function convertISBN(form)
 +{
 + // Set default variables and cleanup ISBN
 + var form = document.isbncnvt;​
 + form.isbn_in.value = form.isbn_in.value.replace(/​[-\s]/​g,""​).toUpperCase();​
 + var isbnnum = form.isbn_in.value;​
 + var isbn10exp = /​^\d{9}[0-9X]$/;​
 + var isbn13exp = /^\d{13}$/;
 + var isbnlen = isbnnum.length;​
 + var total = 0;
 +
 + // Preliminary validation
 + if (isbnlen == 0) {
 + alert("​Please enter an ISBN to convert in the first box."​);​
 +        form.isbn_in.focus();​
 +      form.isbn_in.select();​
 +       ​ return false;
 +    }
 +
 + if ((form.isbn_out.value != ""​) && (isbnlen == 0)) {
 + alert("​Please enter the ISBN to convert in the first box."​);​
 +        form.isbn_in.focus();​
 +        form.isbn_in.select();​
 +        return false;
 +    }
 +
 +    if (!(isbn10exp.test(isbnnum)) && !(isbn13exp.test(isbnnum))) {
 + if ((isbnlen != 10) && (isbnlen != 13)) {
 + ​ alert("​This ISBN is invalid."​ + "​\n"​ +
 +    ​  ​     "It contains " + isbnlen + " characters."​);​
 + }
 + else {
 + ​ alert("​This ISBN is invalid."​ + "​\n"​ +
 +    ​  ​     "It contains invalid characters."​);​
 + }
 +          form.isbn_in.focus();​
 +          form.isbn_in.select();​
 +          return false;
 +    }
 +
 + // Validate & convert a 10-digit ISBN
 + if (isbnlen == 10) {
 + // Test for 10-digit ISBNs:
 + // Formulated number must be divisible by 11
 + // 0234567899 is a valid number
 + for (var x=0; x<9; x++) { 
 + total = total+(isbnnum.charAt(x)*(10-x)); ​
 + }
 +
 + // check digit
 + z = isbnnum.charAt(9);​
 + if (z == "​X"​) { z = 10; }
 +
 + // validate ISBN
 + if ((total+z*1) % 11 != 0) {   // modulo function gives remainder
 + z = (11 - (total % 11)) % 11;
 + if (z == 10) { z = "​X";​ }
 + alert("​This 10-digit ISBN is invalid."​ + "​\n"​ +
 +       "The check digit should be " + z + "​."​);​
 + form.isbn_in.focus();​
 + form.isbn_in.select();​
 + return false;
 + }
 + else {
 + // convert the 10-digit ISBN to a 13-digit ISBN
 + isbnnum = "​978"​+isbnnum.substring(0,​9);​
 + total = 0;
 + for (var x=0; x<12; x++) {
 + if ((x % 2) == 0) { y = 1; }
 + else { y = 3; }
 + total = total+(isbnnum.charAt(x)*y);​
 + }
 + z = (10 - (total % 10)) % 10;
 + }
 + }
 +
 + // Validate & convert a 13-digit ISBN
 + else { 
 + // Test for 13-digit ISBNs
 + // 9780234567890 is a valid number
 + for (var x=0; x<12; x++) {
 + if ((x % 2) == 0) { y = 1; }
 + else { y = 3; }
 + total = total+(isbnnum.charAt(x)*y);​
 + }
 +
 + // check digit
 + z = isbnnum.charAt(12);​
 +
 + // validate ISBN
 + if ((10 - (total % 10)) % 10 != z) {   // modulo function gives remainder
 + z = (10 - (total % 10)) % 10; 
 + alert("​This 13-digit ISBN is invalid."​ + "​\n"​ +
 +       "The check digit should be " + z + "​."​);​
 + form.isbn_in.focus();​
 + form.isbn_in.select();​
 + return false;
 + }
 + else {
 + // convert the 13-digit ISBN to a 10-digit ISBN
 + if ((isbnnum.substring(0,​3) != "​978"​)) {
 + alert("​This 13-digit ISBN does not begin with \"​978\""​ + "​\n"​ +
 +       "It cannot be converted to a 10-digit ISBN."​);​
 + form.isbn_in.focus();​
 + form.isbn_in.select();​
 + return false;
 + }
 + else {
 + isbnnum = isbnnum.substring(3,​12);​
 + total = 0;
 + for (var x=0; x<9; x++) {
 + total = total+(isbnnum.charAt(x)*(10-x));​
 + }
 + z = (11 - (total % 11)) % 11;
 + if (z == 10) { z = "​X";​ } 
 + }
 + }
 + }
 + if (form.hyphenate.checked == true) {
 + bAlert = true;
 + form.isbn_in.value = hyphenate(form.isbn_in.value);​
 + bAlert = false;
 + form.isbn_out.value = hyphenate(isbnnum+z);​
 + }
 + else { form.isbn_out.value = isbnnum+z; } 
 + return true;
 +
 +}//​convertISBN(form)
 +
 +function hyphenate(isbn)
 +{
 +
 +var prefix;
 +
 +if (isbn.length == 13) // for 13-digit ISBNs
 +{
 + prefix = isbn.substring(0,​3) + "​-";​
 + isbn = isbn.substring(3,​13);​
 +}
 +else { prefix = '';​ }
 +
 +var d = eval(isbn.substring(0,​1));​ //​ one digit
 +var d2 = eval(isbn.substring(1,​3));​ //​ two digits
 +var d4 = eval(isbn.substring(1,​5));​ //​ four digits
 +var objRegExp = "";​
 +
 +switch(d) {
 + case 0:
 +    case 3:
 +    case 4:
 +/*
 +0 = English-speaking areas
 +3 = German-speaking areas
 +4 = Japan
 +*/
 + switch(true) {
 + case (d2 < 20):
 + objRegExp = /​(\d)(\d{2})(\d{6})(\w)/;​
 +         break;
 +        case (d2 < 70):
 + objRegExp = /​(\d)(\d{3})(\d{5})(\w)/;​
 +   break;
 +        case (d2 < 85):
 + objRegExp = /​(\d)(\d{4})(\d{4})(\w)/;​
 +   break;
 +        case (d2 < 90):
 + objRegExp = /​(\d)(\d{5})(\d{3})(\w)/;​
 +   break;
 +        case (d2 < 95):
 + objRegExp = /​(\d)(\d{6})(\d{2})(\w)/;​
 +   break;
 +        case (d2 <= 99):
 + objRegExp = /​(\d)(\d{7})(\d)(\w)/;​
 + break;
 +        default:
 +         break;
 + }
 + break;
 +
 + case 1:
 +/*
 +1 = English-speaking areas
 +*/
 + switch(true) {
 + case (d4 < 1000):
 + objRegExp = /​(\d)(\d{2})(\d{6})(\w)/;​
 +         break;
 +        case (d4 < 4000):
 + objRegExp = /​(\d)(\d{3})(\d{5})(\w)/;​
 + break;
 +        case (d4 < 5500):
 + objRegExp = /​(\d)(\d{4})(\d{4})(\w)/;​
 +   break;
 +        case (d4 < 8698):
 + objRegExp = /​(\d)(\d{5})(\d{3})(\w)/;​
 +   break;
 +        case (d4 < 9990):
 + objRegExp = /​(\d)(\d{6})(\d{2})(\w)/;​
 + break;
 +        case (d4 <= 9999):
 + objRegExp = /​(\d)(\d{7})(\d)(\w)/;​
 +   break;
 +        default:
 +         break;
 + }
 + break;
 +
 +    case 2:
 +/*
 +2 = French-speaking areas
 +*/
 + switch(true) {
 + case (d2 < 20):
 + objRegExp = /​(\d)(\d{2})(\d{6})(\w)/;​
 +         break;
 +        case (d2 < 70):
 + objRegExp = /​(\d)(\d{3})(\d{5})(\w)/;​
 +   break;
 +        case (d2 < 84):
 + objRegExp = /​(\d)(\d{4})(\d{4})(\w)/;​
 + break;
 +        case (d2 < 90):
 + objRegExp = /​(\d)(\d{5})(\d{3})(\w)/;​
 + break;
 +        case (d2 < 95):
 + objRegExp = /​(\d)(\d{6})(\d{2})(\w)/;​
 +   break;
 +        case (d2 <= 99):
 + objRegExp = /​(\d)(\d{7})(\d)(\w)/;​
 + break;
 +        default:
 +         break;
 + }
 + break;
 +  ​
 +    case 9:
 +/*
 +90 = Dutch/​Flemish-speaking
 +*/ 
 +  if (isbn.substring(1,​2) == 0) {
 + d2 = isbn.substring(2,​4);​
 + switch(true) {
 + case (d2 < 20):
 + objRegExp = /​(\d{2})(\d{2})(\d{5})(\w)/;​
 +         break;
 +        case (d2 < 50):
 + objRegExp = /​(\d{2})(\d{3})(\d{4})(\w)/;​
 +   break;
 +        case (d2 < 70):
 + objRegExp = /​(\d{2})(\d{4})(\d{3})(\w)/;​
 +   break;
 +        case (d2 < 80):
 + objRegExp = /​(\d{2})(\d{5})(\d{2})(\w)/;​
 +   break;
 +        case (d2 <= 81):
 + objRegExp = /​(\d{2})(\d{6})(\d)(\w)/;​
 + break;
 +        default:
 +     break;
 + }
 +  }
 +
 +/*
 +965 = Israel
 +*/
 +  if (isbn.substring(1,​3) == 65) { 
 + d2 = isbn.substring(3,​5);​
 + switch(true) {
 + case (d2 < 20):
 + objRegExp = /​(\d{3})(\d{2})(\d{4})(\w)/;​
 +         break;
 +        case (d2 < 70):
 + objRegExp = /​(\d{3})(\d{3})(\d{3})(\w)/;​
 +   break;
 +        case (d2 < 90):
 + objRegExp = /​(\d{3})(\d{4})(\d{2})(\w)/;​
 +   break;
 +        case (d2 <= 95):
 + objRegExp = /​(\d{3})(\d{5})(\d)(\w)/;​
 +   break;
 +        default:
 +         break;
 + }
 +  }  ​
 +
 +/*
 +981 = Singapore
 +*/ 
 +  if (isbn.substring(1,​3) == 81) {
 + d2 = isbn.substring(3,​5);​
 + switch(true) {
 + case (d2 < 20):
 + objRegExp = /​(\d{3})(\d{2})(\d{4})(\w)/;​
 +         break;
 +        case (d2 < 30):
 + objRegExp = /​(\d{3})(\d{3})(\d{3})(\w)/;​
 +   break;
 +        case (d2 <= 40):
 + objRegExp = /​(\d{3})(\d{4})(\d{2})(\w)/;​
 +   break;
 +        default:
 +         break;
 + }
 +  }  ​
 +  else { break; }
 +
 +        break;
 +
 + default:
 +   ​ break;​
 +}
 +
 +if (objRegExp != ""​) {
 +       isbn = prefix + isbn.replace(objRegExp,​ "​$1-$2-$3-$4"​);​
 +}
 +else { 
 + if (bAlert == true) { alert("​Unable to hyphenate this ISBN!"​);​ }
 + isbn = (prefix + isbn).replace(/​[-]/​g,""​);​
 +}
 +return isbn;
 +}//​hyphenate(isbn)
 +</​code>​
 +
 +{{tag>​catalogacion}}
isbn-13.txt · Last modified: 29/11/2010 00:00 (external edit)