JSFiddle - React, Tailwind, and code Playground
by brunogc
JavaScript
var $isbn = (function() {
var version = 1.2; /** data: 02.08.2019 **/
function validate(isbn,is10or13) {
var isbnSanitized = parse(isbn);
// Checar pelo formato ISBN-10 ou ISBN-13
var regex = /^(?:ISBN(?:-1[03])?:? )?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]$/;
if (regex.test(isbnSanitized)) {
// Split números em uma array
var chars = isbnSanitized.replace(/[- ]|^ISBN(?:-1[03])?:?/g, "").split("");
//alert(chars);
// Remover o digito final do ISBN, e guarda-lo na variável "last"
var last = chars.pop();
var sum = 0;
var check, i;
var charsCount = chars.length;
if (chars.length == 9) {
// Calcular o dígito de ISBN-10
chars.reverse();
for (i = 0; i < chars.length; i++) {
sum += (i + 2) * parseInt(chars[i], 10);
}
check = 11 - (sum % 11);
if (check == 10) {
check = "X";
} else if (check == 11) {
check = "0";
}
} else {
// Calcular o dígito de ISBN-13
for (i = 0; i < chars.length; i++) {
sum += (i % 2 * 2 + 1) * parseInt(chars[i], 10);
}
check = 10 - (sum % 10);
if (check == 10) {
check = "0";
}
}
if (check == last) {
//alert("Valid ISBN");
return (is10or13)? charsCount : true;
} else {
//alert("Invalid ISBN check digit");
return false;
}
} else {
//alert("Invalid ISBN");
return false;
}
}
function isIsbn10(isbn){
...