Ir ao conteúdo
  • Cadastre-se

CPF - CPNJ


brunoefa

Posts recomendados

E ai galera...

Eu tô desenvolvendo um programinha e eu tô precisando de saber os cálculos de verificação de cpf e cpnj pra verificar se são válidos ou não. Se alguén souber os cálculos e puder me passar para que eu possa emplementar um algorítimo muito obrigado.

Bruno Eustáquio

Link para o comentário
Compartilhar em outros sites

Eu uso assim e funciona muito bem!

Function ValidaCNPJ(sCNPJ: string; MostraMsg: boolean = true): boolean;
const String1 = '543298765432';
           String2 = '654329876543';
var i,j,Digito: byte;
       Controle: string[2];
       StringX: string;
       Soma: smallint;
begin
     sCNPJ := Copy( '00000000000000'+Trim(sCNPJ),(Length(Trim(sCNPJ))+14)-13,14 );
     Controle := '   ';
     Digito := 0;
     StringX := String1;
     for i := 1 to 2 do
     begin
           Soma := 0;
           if i = 2 then StringX := String2;
           for j := 1 to 12 do
               Soma := Soma + ( StrToIntDef(sCNPJ[j],0) * StrToIntDef(StringX[j],0) );
           if i = 2 then
               Soma := Soma + (2 * Digito);
           Digito := (Soma * 10) Mod 11;
           if Digito = 10 then
               Digito := 0;
           Controle[i] := IntToStr( Digito )[1];
     end;
     Result := Controle = Copy( sCNPJ,13,2 );
     if not Result and MostraMsg then
         Application.MessageBox('Número de CNPJ inválido!','Atenção',mb_TaskModal + mb_IconError)
     else
         Application.MessageBox('Número de CNPJ Correto','Atenção',mb_TaskModal + mb_IconWarning);
     end;


function ValidaCPF(sCPF: string; MostraMsg: boolean = true): boolean;
const String1 = '100908070605040302';
           String2 = '111009080706050403';
var i,j,Digito: byte;
       Controle: string[2];
       StringX: string;
       Soma: smallint;
begin
     sCPF := Copy( '00000000000'+Trim(sCPF),(Length(Trim(sCPF))+11)-10,11 );
     Controle := '   ';
     Digito := 0;
     StringX := String1;

     for i := 1 to 2 do
     begin
           Soma := 0;
           if i = 2 then StringX := String2;
           for j := 1 to 9 do
               Soma := Soma + ( StrToIntDef(sCPF[j],0) * StrToIntDef( Copy( StringX,j+(j-1),2 ),0 ) );
           if i = 2 then
               Soma := Soma + (2 * Digito);
           Digito := (Soma * 10) Mod 11;
           if Digito = 10 then
               Digito := 0;
           Controle[i] := IntToStr( Digito )[1];
     end;
     Result := Controle = Copy( sCPF,10,2 );
     if not Result and MostraMsg then
         Application.MessageBox('Número de CPF inválido!','Atenção',mb_TaskModal + mb_IconError)
     else
         Application.MessageBox('Número de CPF Correto','Atenção',mb_TaskModal + mb_IconWarning);
     end;

Se quiser também tem o do título de eleitor!

function ValidaTituloEleitor(sTitulo: string; MostraMsg: boolean = True): boolean;
const
   Multiplicadores: array[1..11] of shortint = (10,9,8,7,6,5,4,3,2,4,3);
var
   iCont, iAux, DigCalculado, DigInformado: shortint;
   iDigito: integer;
begin
   result := false;
   if Length(stitulo) = 0 then
       exit;

   stitulo := StringOfChar('0',13-Length(stitulo))+stitulo; // 13 posições
   iAux := StrToInt(Copy(stitulo,10,2)); // valor para auxiliar o cálculo do dígito

   // dígito verificador
   DigInformado := StrToInt(Copy(stitulo,12,2));;
   DigCalculado := 0;

   iDigito := 0;
   for iCont := 1 to 11 do
   begin
       iDigito := iDigito + (StrToInt(stitulo[iCont]) * Multiplicadores[iCont]);
       if iCont in [9,11] then
       begin
           iDigito := iDigito mod 11;
           if iDigito > 1 then
               iDigito := 11 - iDigito
           else
           begin
               if iAux <= 2 then
                   iDigito := 1 - iDigito
               else
                   iDigito := 0;
           end;
           if iCont = 9
           then Digcalculado := iDigito * 10
           else Digcalculado := Digcalculado + iDigito;
           iDigito := iDigito * 2;
       end;
   end;

   // verifica se o digito é verdadeiro
   Result := DigCalculado = DigInformado;

   if not Result and MostraMsg then
         Application.MessageBox('Número do Título de Eleitor inválido!','Atenção',mb_TaskModal + mb_IconError)
     else
         Application.MessageBox('Número do Título de Eleitor Correto','Atenção',mb_TaskModal + mb_IconWarning);
     end;

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Em PHP.

O que irei mostrar não será novidade para muitos, mas poderá ajudar outros que não tem experiência. Como utilizo o PHP para criar sistemas internos de empresas, aprendi a usar JavaScript para deixar a digitação dos dados mais prática e rápida. Então, como encontrei os códigos separados, máscara de CPF sem validação e validação de CPF sem máscara, resolvi juntar os dois e fazer a validação do CPF com máscara em JavaScript.

Vamos criar um arquivo .php que servirá de modelo para testarmos o nosso código.

Defina o nome do arquivo como sendo cpf.php:

<html>

<head>

<script language="JavaScript">

<!--

function mascara_cpf(cpf)

{

    var mycpf = '';

    mycpf = mycpf + cpf;

    if (mycpf.length == 3) {

        mycpf = mycpf + '.';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 7) {

        mycpf = mycpf + '.';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 11) {

        mycpf = mycpf + '-';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 14) {

    }

}

//-->

</script>

Feito isso vamos criar um formulário para processar o CPF.

<form name="Formulario_Validacao_CPF" action="cpf.php">

CPF: <input type="text" name="cpf" onKeyUp="mascara_cpf(this.value)"

    maxlength="14" SIZE="15">

<input type="submit" value="Testar CPF">

</form>

Note que foi usado o event handler onKeyUp para chamar a função JavaScript.

Agora a função para que vai verificar o cpf.

<?php

if ($cpf != "") {

    $a= substr("$cpf", 0,3);

    $b= substr("$cpf", 4,3);

    $c1= substr("$cpf", 8,3);

    $d= substr("$cpf", 12,2);

    $CPF=$a.$b.$c1.$d;

    $s = $CPF;

    $c =  substr("$s", 0,9);

    $dv = substr("$s", 9,2);

    $d1 = 0;

    for ($i = 0; $i < 9; $i++) {

        $d1 += $c[$i]*(10-$i);

    }

    if ($d1 == 0) {

        $v=1;

        print("CPF Invalido");

    }

    $d1 = 11 - ($d1 % 11);

    if ($d1 > 9) {

        $d1 = 0;

    }

    if ($dv[0] != $d1) {

        $v=$v+1;

        print("CPF Invalido");

    }

    $d1 *= 2;

    for ($i = 0; $i < 9; $i++) {

        $d1 += $c[$i]*(11-$i);

    }

    $d1 = 11 - ($d1 % 11);

    if ($d1 > 9) {

        $d1 = 0;

    }

    if ($dv[1] != $d1) {

        $v=$v+1;

        print("CPF Invalido");

    }

    if ($v == "") {

        print("CPF OK");

    }

}

?>

O código de validação é o mesmo que vocês irão encontrar por aí, a diferença é o acréscimo destas variáveis, que tem a função de eliminar os pontos e o traço do campo input.

<?php

$a= substr("$cpf", 0,3);

$b= substr("$cpf", 4,3);

$c1= substr("$cpf", 8,3);

$d= substr("$cpf", 12,2);

$CPF=$a.$b.$c1.$d;

?>

Depois de separar os números do CPF ele une novamente concatenando todas as variáveis. Simples não, abaixo está o código completo.

<html>

<head>

<script language="JavaScript">

<!--

function mascara_cpf(cpf)

{

    var mycpf = '';

    mycpf = mycpf + cpf;

    if (mycpf.length == 3) {

        mycpf = mycpf + '.';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 7) {

        mycpf = mycpf + '.';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 11) {

        mycpf = mycpf + '-';

        document.forms[0].cpf.value = mycpf;

    }

    if (mycpf.length == 14) {

    }

}

//-->

</script>

</head>

<body>

<form name="Formulario Validacao" action="cpf.php">

CPF: <input type="text" name="cpf" onKeyUp="mascara_cpf(this.value)"  maxlength="14" size="15">

<input type="submit" value="Testar CPF">

</form>

<?php

if ($cpf != "") {

    $a= substr("$cpf", 0,3);

    $b= substr("$cpf", 4,3);

    $c1= substr("$cpf", 8,3);

    $d= substr("$cpf", 12,2);

    $CPF=$a.$b.$c1.$d;

    $s = $CPF;

    $c =  substr("$s", 0,9);

    $dv = substr("$s", 9,2);

    $d1 = 0;

    for ($i = 0; $i < 9; $i++) {

        $d1 += $c[$i]*(10-$i);

    }

    if ($d1 == 0) {

        $v=1;

        print("CPF Invalido");

    }

    $d1 = 11 - ($d1 % 11);

    if ($d1 > 9) {

        $d1 = 0;

    }

    if ($dv[0] != $d1) {

        $v=$v+1;

        print("CPF Invalido");

    }

    $d1 *= 2;

    for ($i = 0; $i < 9; $i++) {

        $d1 += $c[$i]*(11-$i);

    }

    $d1 = 11 - ($d1 % 11);

    if ($d1 > 9) {

        $d1 = 0;

    }

    if ($dv[1] != $d1) {

        $v=$v+1;

        print("CPF Invalido");

    }

    if ($v == "") {

        print("CPF OK");

    }

}

?>

</body>

</html>

É isso, qualquer dúvida por favor publique um comentário abaixo.

Gordo

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...