Fórum verificando CPF e CNPJ... #289897
28/07/2005
0
e
uma outra função que verifique se o CNPJ digitado é válido
obrigado
Rafael Santana
Curtir tópico
+ 0Posts
28/07/2005
Motta
Gostei + 0
29/07/2005
Alex Maia
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;
Gostei + 0
29/07/2005
Adriano Santos
[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.
Gostei + 0
29/07/2005
Daniel Martins
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...
Gostei + 0
16/03/2008
Peterpan
Gostaria muito de poder ler esse seu artigo.
Só tem um problema, esse link esta quebrado.
Abraços
Sergio
Gostei + 0
16/03/2008
Wanderok
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
Gostei + 0
19/03/2008
Emerson Nascimento
[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;
Gostei + 0
19/03/2008
Facc
[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
Gostei + 0
19/03/2008
Wanderok
Gostei + 0
19/03/2008
Peterpan
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;
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;
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;
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;
Matou Emerson, so faltou para validar RG
Abraços
Gostei + 0
20/03/2008
Emerson Nascimento
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.
Gostei + 0
24/03/2008
Pestana_
Ola Emerson,
você poderia informar aonde eu posso conseguir está DLL?
Obrigado pela atenção!
Pestana.
Gostei + 0
26/03/2008
Emerson Nascimento
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.
Gostei + 0
27/03/2008
Pestana_
bom dia Emerson, muito obrigado pela ajuda!
Abraços,
Pestana.
Gostei + 0
07/04/2008
Adriano Santos
o link tá off[/quote:16f578ec83]
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]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)