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){
      ...