Dispersion Design

< Back

Converting ISBN-10 to ISBN-13

2014-03-12

Introduction

An ISBN (International Standard Book Number) can come in the form of 10 or 13 digits. Old 9-digit SBNs can be converted to 10-digit ISBNs by simply prepending a '0'. Converting from ISBN-10 to ISBN-13, however, is a little more complicated.

This article explains how to convert a 10-digit ISBN to a 13-digit ISBN.

Overview

Converting from ISBN-10 to ISBN-13 involves two steps:

  1. Prepend the ISBN-10 with the characters "978".
  2. Remove the ISBN-10 check digit and calculate a new ISBN-13 check digit.

The check digit is the last digit in the ISBN and is used only for verification purposes.

For example:

0-689-85666-0
becomes
978-0-689-85666-2

JavaScript Implementation

First, we convert the ISBN-10 string to an array of characters:

var chars = str.split("");

Then we add "978" to the beginning of the array:

chars.unshift("9", "7", "8");

Remove the ISBN-10 check digit:

chars.pop();

And calculate the ISBN-13 check digit:

var i = 0;
var sum = 0;
for (i = 0; i < 12; i += 1) {
	sum += chars[i] * ((i % 2) ? 3 : 1);
}
var check_digit = (10 - (sum % 10)) % 10;
chars.push(check_digit);

Finally, convert the character array back to a string:

var isbn13 = chars.join("");

Putting it All Together

Putting all this into a JavaScript function:

function convertISBN10(isbn10) {
	var chars = isbn10.split("");
	chars.unshift("9", "7", "8");
	chars.pop();

	var i = 0;
	var sum = 0;
	for (i = 0; i < 12; i += 1) {
		sum += chars[i] * ((i % 2) ? 3 : 1);
	}
	var check_digit = (10 - (sum % 10)) % 10;
	chars.push(check_digit);

	var isbn13 = chars.join("");
	return isbn13;
}

It is important to recognize that this function expects a valid ISBN-10 with no additional characters such as spaces or dashes. If the ISBN-10 string is likely to contain additional characters, these should first be removed:

// Convert lowercase 'x' to uppercase 'X'
isbn10 = isbn10.replace(/x/g, 'X');

// Remove characters other than 0-9 or X
isbn10 = isbn10.replace(/[^0-9X]/g, '');

var isbn13 = convertISBN10(isbn10);

Demo

The following JavaScript demo converts an ISBN-10 to ISBN-13: