ISBN-10 identifiers are ten digits long. The first nine characters are digits 0-9. The last digit can be 0-9 or X, to indicate a value of 10.
An ISBN-10 number is valid if the sum of the digits multiplied by their position modulo 11 equals zero.
For example:
ISBN : 1 1 1 2 2 2 3 3 3 9
position : 1 2 3 4 5 6 7 8 9 10
This is a valid ISBN, because:
(11 + 12 + 13 + 24 + 25 + 26 + 37 + 38 + 39 + 910) % 11 = 0
Examples
1112223339 --> true
111222333 --> false
function validISBN10(isbn) {
if (!(/^\d{9}[\d|X]$/.test(isbn))) { return false }
let sum = 0;
let arr = [...isbn];
for (let i = 0; i < arr.length; i++) {
sum += (arr[i] === 'X') ? (10 * (i+1)) : (arr[i] * (i+1))
}
return (sum % 11 === 0) ? true : false;
}
function validISBN10(isbn) {
var len = isbn.length;
if (len !== 10) {
return false;
}
return isbn.split('')
.map(function (num, index) {
return (num === 'X' && index === len - 1 ? 10 : parseInt(num, 10)) * (index + 1);
})
.reduceRight(function (a, b) {
return a + b;
}, 0) % 11 === 0;
}