GARANTIR DESCONTO

Fórum Validação de CPF #226757

18/04/2004

0

Olá para todos!
Fiz uma pesquisa aqui no forum sobre validação de cpf e encontrei a resposta.
Mas uma duvida me surgiu, se lanço um cpf invalido a função funciona me gerando uma mensagem que esta errado.
Mas reparei o seguinte se lanço um CPF 111.111.111-11 a função valida o CPF e assim com 222.222.222-22 e 000.000.000-00 gostaria de saber se isto esta correto, pois CPF 000.000.000-00 não existe, ou se tem alguma função que não permita esse tipo de entrada.
Desde de já Obrigado!


Debug

Debug

Responder

Posts

18/04/2004

Maxadens

A função de validação de CPF é totalmente baseada em calculos matemáticos. Mas vamos colocar em questão o porque que existe validação de CPF.
O CPF, como vc e todos devem saber, possui 11 numeros, sendo os 2 ultimos o DV (Digito Verificador). Podemos usar digitos verificadores em codigos de cadastro de clientes ou de produtos. DVs com um, dois numeros ou ate mesmo letras. Mas... por qual motivo? O motivo é simples.
Sumponhamos que vc vai digitar um produto de codigo: 7015-2
7015 é o numero dele e 2 é o Digito verificador. Se em uma eventualidade vc digita 6015-2, o sistema ira verificar se o calculo feito com o numero retorna 2. se o DV estiver errado, o numero do produto deve estar tambem.
no caso do CPF tambem. suponhamos que vc digite um dos 9 numeros do CPF errado. o DV servira como garantia. Mas ninguem garante se aquele numero de CPF existe ou não.

DV serve para verificar possiveis erros de digitação. Porque a chance de erro se torna quase 0.

Se vc quer proibir esse tipo de coisa (000.000.000-00), é so implementar a rotina de validação. Mas cá entre nos: Quem seria o usuário louco que colocaria um CPF desses? Se o sistema é de uma loja, as pessoas responsáveis pelo cadastro devem ser responsáveis pelas informações do cadastro. Acho que seria inútil essa validação. Minha opinião é claro.

Mas é isso ai. Na verdade eu so quiz mesmo foi fazer um comentário. Mas como todos sabemos. Na programação, tudo é possivel, ate que provem o contrário!

Valeu!


Responder

Gostei + 0

19/04/2004

Paullus

Cara... passei pelo mesmo problema.
Concordo com o comentário do [b:e518784f9a]RonaldoAraujo[/b:e518784f9a], de que o usuário é responsável pelas informações dadas ao sistema, só que o dono do sistema deve se precaver de usuários mal-intencionados.

A linha abaixo é a que eu utilizo para invalidar este tipo de entrada.

  Result := AnsiReplaceStr(Valor, Valor[1], ´´) <> ´´;


Onde [b:e518784f9a]Valor[/b:e518784f9a] é a variável contendo o número do CPF. Supondo que a sua entrada contenha somente números (retirando-se os pontos e o hífen do DV).

Se você desejar a rotina para deixar somente os números é a seguinte:

function apenasNumeros(valor: string): string;
var
  i: integer;
begin
  result := ´´;
  for i := 1 to (length(valor)) do
    if (valor[i] in [´0´..´9´]) then
      result := Trim(result + valor[i]);
end;



Responder

Gostei + 0

19/04/2004

Paullus

Foi mal... relendo o meu post anterior eu acho que ficou meio estranha a resposta. Vou deixar mais clara só com código mesmo:

function apenasNumeros(valor: string): string;
var
  i: integer;
begin
  result := ´´;
  for i := 1 to (length(valor)) do
    if (valor[i] in [´0´..´9´]) then
      result := Trim(result + valor[i]);
end;

function validacaoInicial(Valor: string): boolean;
begin
  Result := AnsiReplaceStr(apenasNumeros(Valor), Valor[1], ´´) <> ´´;
end;

function validaCPF(CPF: string): boolean;
var
begin
  if not validacaoInicial(CPF) then
    Exit;
  {Aqui vem o restante do seu código de validação}
end;



Responder

Gostei + 0

19/04/2004

Rodolpho123

Excelentíssima a resposta do Ronaldo.
Sem comentários...


Responder

Gostei + 0

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

Aceitar