GARANTIR DESCONTO

Fórum verificando CPF e CNPJ... #289897

28/07/2005

0

preciso de uma função que verifique se o CPF digitado é válido

e

uma outra função que verifique se o CNPJ digitado é válido

obrigado


Rafael Santana

Rafael Santana

Responder

Posts

28/07/2005

Motta

Dê uma pesquisada e verá varias respostas para esta sua questão.


Responder

Gostei + 0

29/07/2005

Alex Maia

{ Verifica se o CPF/CNPJ e Valido *********************************************}
function VerificaCPF_CNPJ(numero: string): Boolean;
var
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12: integer;
d1,d2: integer;
digitado, calculado: string;

begin
Result := false;

if Length(Numero)=11 then
begin
n1 := StrToInt(numero[1]);
n2 := StrToInt(numero[2]);
n3 := StrToInt(numero[3]);
n4 := StrToInt(numero[4]);
n5 := StrToInt(numero[5]);
n6 := StrToInt(numero[6]);
n7 := StrToInt(numero[7]);
n8 := StrToInt(numero[8]);
n9 := StrToInt(numero[9]);

d1 := n9*2+n8*3+n7*4+n6*5+n5*6+n4*7+n3*8+n2*9+n1*10;
d1 := 11 - (d1 mod 11);
if d1 >= 10 then d1 := 0;

d2:=d1*2+n9*3+n8*4+n7*5+n6*6+n5*7+n4*8+n3*9+n2*10+n1*11;
d2:=11-(d2 mod 11);
if d2>=10 then d2:=0;

calculado := inttostr(d1) + inttostr(d2);
digitado := numero[10] + numero[11];

if calculado = digitado then Result := true;
end;

if Length(Numero)=14 then
begin
n1 := StrToInt(numero[1]);
n2 := StrToInt(numero[2]);
n3 := StrToInt(numero[3]);
n4 := StrToInt(numero[4]);
n5 := StrToInt(numero[5]);
n6 := StrToInt(numero[6]);
n7 := StrToInt(numero[7]);
n8 := StrToInt(numero[8]);
n9 := StrToInt(numero[9]);
n10 := StrToInt(numero[10]);
n11 := StrToInt(numero[11]);
n12 := StrToInt(numero[12]);

d1 := n12*2+n11*3+n10*4+n9*5+n8*6+n7*7+n6*8+n5*9+n4*2+n3*3+n2*4+n1*5;
d1 := 11-(d1 mod 11);
if d1 >= 10 then d1 := 0;

d2 := d1*2+n12*3+n11*4+n10*5+n9*6+n8*7+n7*8+n6*9+n5*2+n4*3+n3*4+n2*5+n1*6;
d2 := 11-(d2 mod 11);
if d2 >= 10 then d2 := 0;

calculado := inttostr(d1)+inttostr(d2);
digitado := numero[13]+numero[14];

if calculado = digitado then Result := true;
end;
end;


Responder

Gostei + 0

29/07/2005

Adriano Santos

Leia meu arquivo no link:

[url=http://www.forumweb.com.br/artigos/artigos.php?action=vertudo&id=15884]Mini-Curso: Criando componentes Parte I[/url]

Lá eu ensino a criar um componente para este fim.


Responder

Gostei + 0

29/07/2005

Daniel Martins

Quais as possibilidades da pessoa trocar um número do cpf e mesmo assim o código validar???
aconteceu aqui, o final do cpf do kara é 9 e ele informou 2 e o código deu como válido. no site da Receita Federal, o número com final 2 da inválido e com o final 9 ele mostra os dados do kara.. lokura..
a unica resposta q tenho para o cliente é que o numero é compativel ..hehehe
a menos que tenha como pegar os dados do kara do banco da receita...


Responder

Gostei + 0

16/03/2008

Peterpan

Ola Adriano Santos;

Gostaria muito de poder ler esse seu artigo.

Leia meu arquivo no link: Mini-Curso: Criando componentes Parte I Lá eu ensino a criar um componente para este fim.


Só tem um problema, esse link esta quebrado.

Abraços

Sergio


Responder

Gostei + 0

16/03/2008

Wanderok

[quote:83996e0995=´DAniel S Martins´]Quais as possibilidades da pessoa trocar um número do cpf e mesmo assim o código validar???
aconteceu aqui, o final do cpf do kara é 9 e ele informou 2 e o código deu como válido. no site da Receita Federal, o número com final 2 da inválido e com o final 9 ele mostra os dados do kara.. lokura..
a unica resposta q tenho para o cliente é que o numero é compativel ..hehehe
a menos que tenha como pegar os dados do kara do banco da receita...[/quote:83996e0995]

Trocar apenas um dígito, CHANCE ZERO !!!!!!!!!!!!

Se o código estiver correto, claro.... :D:D:D


Responder

Gostei + 0

19/03/2008

Emerson Nascimento

algumas rotinas úteis:

[size=18:ea95d4bf6d]validar CNPJ[/size:ea95d4bf6d]
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_IconWarning);
end;


[size=18:ea95d4bf6d]validar CPF[/size:ea95d4bf6d]
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_IconWarning);
end;


[size=18:ea95d4bf6d]validar PIS[/size:ea95d4bf6d]
function ValidaPIS(sPIS: string; MostraMsg: boolean = true): boolean;
var
  iSoma: integer;
  i, iDigito, iDigVer, iMult: shortint;
begin
  Result := Length(Trim(sPIS)) = 11;

  if Result then
  begin
    iDigVer := strtoint(sPIS[11]);
    iSoma := 0;
    iMult := 2;

    for i := 10 downto 1 do
    begin
      iSoma := iSoma + (iMult * strtoint(sPIS[I]));
      if iMult < 9
      then Inc(iMult)
      else iMult := 2;
    end;
    iDigito := 11 - (iSoma mod 11);

    if iDigito > 9 then iDigito := 0;
      Result := (iDigVer = iDigito);
  end;

  if not Result and MostraMsg then
    Application.MessageBox(´Número do PIS inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;


[size=18:ea95d4bf6d]validar Titulo de Eleitor[/size:ea95d4bf6d]
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_IconWarning);
end;
[size=12:ea95d4bf6d][/size:ea95d4bf6d]


Responder

Gostei + 0

19/03/2008

Facc

[quote:a640e1acd8=´Adriano Santos´]Leia meu arquivo no link:

[url=http://www.forumweb.com.br/artigos/artigos.php?action=vertudo&id=15884]Mini-Curso: Criando componentes Parte I[/url]

Lá eu ensino a criar um componente para este fim.[/quote:a640e1acd8]

o link tá off


Responder

Gostei + 0

19/03/2008

Wanderok

Emerson.en matou !!! :D:D:D


Responder

Gostei + 0

19/03/2008

Peterpan

algumas rotinas úteis: [size=18:c46e03897b]validar CNPJ[/size:c46e03897b]
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_IconWarning);
end;
[size=18:c46e03897b]validar CPF[/size:c46e03897b]
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_IconWarning);
end;
[size=18:c46e03897b]validar PIS[/size:c46e03897b]
function ValidaPIS(sPIS: string; MostraMsg: boolean = true): boolean;
var
  iSoma: integer;
  i, iDigito, iDigVer, iMult: shortint;
begin
  Result := Length(Trim(sPIS)) = 11;

  if Result then
  begin
    iDigVer := strtoint(sPIS[11]);
    iSoma := 0;
    iMult := 2;

    for i := 10 downto 1 do
    begin
      iSoma := iSoma + (iMult * strtoint(sPIS[I]));
      if iMult < 9
      then Inc(iMult)
      else iMult := 2;
    end;
    iDigito := 11 - (iSoma mod 11);

    if iDigito > 9 then iDigito := 0;
      Result := (iDigVer = iDigito);
  end;

  if not Result and MostraMsg then
    Application.MessageBox(´Número do PIS inválido!´,´Atenção´,mb_TaskModal + mb_IconWarning);
end;
[size=18:c46e03897b]validar Titulo de Eleitor[/size:c46e03897b]
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_IconWarning);
end;
[size=12:c46e03897b][/size:c46e03897b]


Matou Emerson, so faltou para validar RG

Abraços


Responder

Gostei + 0

20/03/2008

Emerson Nascimento

Pra CPF, CNPJ, PIS e Título de Eleitor é fácil, pois é um documento Federal e o código é utilizado em todo o território nacional.

Pra RG é complicado, pois dependendo do órgão emissor a regra muda.
Pode ser a Secretaria de Segurança, os Conselhos Regionais (Medicina, Engenharia, etc), Forças Armadas, etc.

Para a Inscrição Estadual também é complicado, pois como o próprio nome diz, a regra é definida individualmente por cada estado da federação. Sem contar ainda que, em função do dia em que foi obtida a inscrição, o cálculo pode mudar, mesmo dentro de um mesmo estado. por exemplo: na Bahia, se a inscrição foi tirada nos anos 80, utiliza-se um algoritmo, diferente do atual... por isso eu prefiro utilizar a DLL fornecida pelo governo para tratar da inscrição.


Responder

Gostei + 0

24/03/2008

Pestana_

Pra CPF, CNPJ, PIS e Título de Eleitor é fácil, pois é um documento Federal e o código é utilizado em todo o território nacional. Pra RG é complicado, pois dependendo do órgão emissor a regra muda. Pode ser a Secretaria de Segurança, os Conselhos Regionais (Medicina, Engenharia, etc), Forças Armadas, etc. Para a Inscrição Estadual também é complicado, pois como o próprio nome diz, a regra é definida individualmente por cada estado da federação. Sem contar ainda que, em função do dia em que foi obtida a inscrição, o cálculo pode mudar, mesmo dentro de um mesmo estado. por exemplo: na Bahia, se a inscrição foi tirada nos anos 80, utiliza-se um algoritmo, diferente do atual... por isso eu prefiro utilizar a DLL fornecida pelo governo para tratar da inscrição.


Ola Emerson,

você poderia informar aonde eu posso conseguir está DLL?

Obrigado pela atenção!
Pestana.


Responder

Gostei + 0

26/03/2008

Emerson Nascimento

a dll para verificação da inscrição estadual está no site do [url=http://www.sintegra.gov.br/]Sintegra[/url], link Serviços, Downloads.

ou no link direto: http://www.sintegra.gov.br/DLL3.zip

eles passam dentro do arquivo zip um exemplo de uso. o programa exemplo foi feito em Delphi.


Responder

Gostei + 0

27/03/2008

Pestana_

a dll para verificação da inscrição estadual está no site do [url=http://www.sintegra.gov.br/]Sintegra[/url], link Serviços, Downloads. ou no link direto: http://www.sintegra.gov.br/DLL3.zip eles passam dentro do arquivo zip um exemplo de uso. o programa exemplo foi feito em Delphi.


bom dia Emerson, muito obrigado pela ajuda!

Abraços,
Pestana.


Responder

Gostei + 0

07/04/2008

Adriano Santos

[quote:16f578ec83=´Adriano Santos´]Leia meu arquivo no link: [url=http://www.forumweb.com.br/artigos/artigos.php?action=vertudo&id=15884]Mini-Curso: Criando componentes Parte I[/url] Lá eu ensino a criar um componente para este fim.


o link tá off[/quote:16f578ec83]

Ola Adriano Santos; Gostaria muito de poder ler esse seu artigo. [quote:16f578ec83]Leia meu arquivo no link: Mini-Curso: Criando componentes Parte I Lá eu ensino a criar um componente para este fim.


Só tem um problema, esse link esta quebrado.

Abraços

Sergio[/quote:16f578ec83]

Só pra corrigir o post:
[url=https://www.devmedia.com.br/articles/viewcomp.asp?comp=1107]Mini-Curso: Criando componentes Parte I[/url]
[url=https://www.devmedia.com.br/articles/viewcomp.asp?comp=1118]Mini-Curso: Criando componentes Parte II[/url]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar