verificando CPF e CNPJ...
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
e
uma outra função que verifique se o CNPJ digitado é válido
obrigado
Rafael Santana
Curtidas 0
Respostas
Motta
28/07/2005
Dê uma pesquisada e verá varias respostas para esta sua questão.
GOSTEI 0
Alex Maia
28/07/2005
{ 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;
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
Adriano Santos
28/07/2005
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.
[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
Daniel Martins
28/07/2005
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...
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
Peterpan
28/07/2005
Ola Adriano Santos;
Gostaria muito de poder ler esse seu artigo.
Só tem um problema, esse link esta quebrado.
Abraços
Sergio
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
GOSTEI 0
Wanderok
28/07/2005
[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
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
Emerson Nascimento
28/07/2005
algumas rotinas úteis:
[size=18:ea95d4bf6d]validar CNPJ[/size:ea95d4bf6d]
[size=18:ea95d4bf6d]validar CPF[/size:ea95d4bf6d]
[size=18:ea95d4bf6d]validar PIS[/size:ea95d4bf6d]
[size=18:ea95d4bf6d]validar Titulo de Eleitor[/size:ea95d4bf6d]
[size=12:ea95d4bf6d][/size:ea95d4bf6d]
[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
Facc
28/07/2005
[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
[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
Wanderok
28/07/2005
Emerson.en matou !!! :D:D:D
GOSTEI 0
Peterpan
28/07/2005
algumas rotinas úteis:
[size=18:c46e03897b]validar CNPJ[/size:c46e03897b]
[size=18:c46e03897b]validar CPF[/size:c46e03897b]
[size=18:c46e03897b]validar PIS[/size:c46e03897b]
[size=18:c46e03897b]validar Titulo de Eleitor[/size:c46e03897b]
[size=12:c46e03897b][/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;
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
Emerson Nascimento
28/07/2005
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.
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
Pestana_
28/07/2005
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.
GOSTEI 0
Emerson Nascimento
28/07/2005
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.
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
Pestana_
28/07/2005
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.
GOSTEI 0
Adriano Santos
28/07/2005
[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]
GOSTEI 0