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);