• Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   13-02-2016

      Prezados membros do Clube do Hardware,

      Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:
        Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas ao formulário abaixo:    Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Seguidores 0
brunoefa

CPF - CPNJ

3 posts neste tópico

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

Compartilhar este post


Link para o post
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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!


Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.


Entrar agora
Entre para seguir isso  
Seguidores 0