JSFiddle - React, Tailwind, and code Playground

by vitorbarbosa

JavaScript

//var value = "111.111.111-11";
//var value = "222.222.222-22";
var value = "086.317.908-85"; //cpf inválido -> resultado válido
var value = "081.861.588-55"; //cpf inválido -> resultado válido
//var value = "311.761.688-86"; //cpf válido -> resultado válido

function CalculaDigitoMod11(numero, qtdDigito, LimMult){
       var Mult, Soma, i, n;
       for(n=1; n<=qtdDigito; n++){
           Soma = 0;
           Mult = 2;
           for(i=numero.length-1; i>=0; i--){
               Soma += (Mult * parseInt(numero.charAt(i)));
               if(++Mult > LimMult) Mult = 2;
           }
           numero += ((Soma * 10) % 11) % 10;
       }
       if(isRepeatedNumber(value, value.length))
           return '';
           
       return numero.substr(numero.length-qtdDigito, qtdDigito);
}

function isRepeatedNumber(value, length){
        value = value.replace(/[^\d]/g,'');
        var numbers = [1,2,3,4,5,6,7,8,9,0];
        var numLength = value.length;
        length = length == undefined ? numLength-3 : length;
        for( n in numbers){
            var regex = new RegExp("["+numbers[n]+"]{"+length+","+numLength+"}");
            if(regex.test(value))
                return true;
        }
        return false;
    }

value = value.replace(/[^\d]/g,'');

var isValid = CalculaDigitoMod11(value.substr(0,value.length-2),2,12) == value.substr(value.length-2);
alert("isValid: "+isValid);