Esse é um dado que para muitas pessoas não é muito comum, mas que para mim tem uma importância enorme, principalmente quem trabalha desenvolvendo Sistemas para Cadastro de Funcionários. Nos fóruns da vida eu encontrei uma função muito boa para verificar se o valor informado pelo usuário é valido ou não. Foi escrita pelo Kelver Merlotti - Coordenador editorial - kelver@activedelphi.com.br . Veja abaixo a função:
function ValidaPIS(Dado : String): boolean;
var
i,
wsoma,
Wm11,
Wdv,
wdigito : Integer;
begin
if Trim(Dado) <> '' Then
begin
wdv := strtoint(copy(Dado, 11, 1));
wsoma := 0;
wm11 := 2;
for i := 1 to 10 do
begin
wsoma := wsoma + (wm11 * strtoint(copy(Dado,11 - i, 1)));
if wm11 <> 9 then
wdigito := 0;
if wdv = wdigito then
validapis := true;
end
else
validapis := false;
end;
var
i,
wsoma,
Wm11,
Wdv,
wdigito : Integer;
begin
if Trim(Dado) <> '' Then
begin
wdv := strtoint(copy(Dado, 11, 1));
wsoma := 0;
wm11 := 2;
for i := 1 to 10 do
begin
wsoma := wsoma + (wm11 * strtoint(copy(Dado,11 - i, 1)));
if wm11 <> 9 then
wdigito := 0;
if wdv = wdigito then
validapis := true;
end
else
validapis := false;
end;
Para usá-la, basta passar os números informados e verificar se a função retornou True ou False, no evento OnExit da edit, por exemplo:
edtPISExit:
if not ValidaPis(edtPis.Text) then
begin
ShowMessage('O nº do PIS informado é inválido!');
edtPis.SetFocus;
exit;
end;
Para ter certeza que somente os números serão passados à função que valida o PIS, você poderá utilizar a função abaixo:
function SomenteNumero(Digitado: string): string;
var
i: integer;
begin
result := '';
for i := 1 to Length(Digitado) do
if (Digitado[i] in ['0'..'9']) then
result := result + Digitado[i];
end;
Assim, a chamada seria:
if not ValidaPis( SomenteNumero(edtPis.Text) ) then
É isso pessoal, eu usei a função e ela funciona realmente. Se você quiser pode mudar as mensagens no Evento OnExist da Edit já que é uma string e você utiliza do jeito que achar melhor, mas é importante lembrar que a padronização dos sistemas traz ao usuário final maior confiança de suas ações.
var
i: integer;
begin
result := '';
for i := 1 to Length(Digitado) do
if (Digitado[i] in ['0'..'9']) then
result := result + Digitado[i];
end;
Assim, a chamada seria:
if not ValidaPis( SomenteNumero(edtPis.Text) ) then
É isso pessoal, eu usei a função e ela funciona realmente. Se você quiser pode mudar as mensagens no Evento OnExist da Edit já que é uma string e você utiliza do jeito que achar melhor, mas é importante lembrar que a padronização dos sistemas traz ao usuário final maior confiança de suas ações.
Nenhum comentário:
Postar um comentário