CONVERVER FUNCAO DELPHI PARA VB6 URGENTE

OLAFEKORKAN 24/09/2009 13:09:58
#323576
Aí pessoal!
Preciso de uma grande ajuda da rapaziada aí!
Estou desenvolvendo um sistema que precisará validar uma determinado número (que é o número do cartão do SUS da pessoa)

No site do cartão SUS tem a fórmula de validação só que está em Delphi!

[txt-color=#b40404]Alguém aí poderia converter essas funções de Delphi para VB6?[/txt-color]

[txt-color=#0404B4]********** SEGUEM AS FUNÇÕES EM DELPHI ********** [/txt-color]


[txt-color=#08088A]----->>> PRIMEIRA FUNÇÃO[/txt-color]

Function ValidaCNS(Num: string):Boolean;
var
pis : string;
resto : integer;
dv : integer;
soma : int64;
resultado : string;

begin
pis := copy(Num,1,11);

soma:= ( ( strtoint64( copy( pis, 1, 1 ) ) ) * 15 ) +
( ( strtoint64( copy( pis, 2, 1 ) ) ) * 14 ) +
( ( strtoint64( copy( pis, 3, 1 ) ) ) * 13 ) +
( ( strtoint64( copy( pis, 4, 1 ) ) ) * 12 ) +
( ( strtoint64( copy( pis, 5, 1 ) ) ) * 11 ) +
( ( strtoint64( copy( pis, 6, 1 ) ) ) * 10 ) +
( ( strtoint64( copy( pis, 7, 1 ) ) ) * 9 ) +
( ( strtoint64( copy( pis, 8, 1 ) ) ) * 8 ) +
( ( strtoint64( copy( pis, 9, 1 ) ) ) * 7 ) +
( ( strtoint64( copy( pis, 10, 1 ) ) ) * 6 ) +
( ( strtoint64( copy( pis, 11, 1 ) ) ) * 5 );

resto:= soma mod 11;
dv := 11 - resto;

if dv = 11 then
dv:= 0;

if dv = 10 then
begin
soma:= ( ( strtoint64( copy( pis, 1, 1 ) ) ) * 15 ) +
( ( strtoint64( copy( pis, 2, 1 ) ) ) * 14 ) +
( ( strtoint64( copy( pis, 3, 1 ) ) ) * 13 ) +
( ( strtoint64( copy( pis, 4, 1 ) ) ) * 12 ) +
( ( strtoint64( copy( pis, 5, 1 ) ) ) * 11 ) +
( ( strtoint64( copy( pis, 6, 1 ) ) ) * 10 ) +
( ( strtoint64( copy( pis, 7, 1 ) ) ) * 9 ) +
( ( strtoint64( copy( pis, 8, 1 ) ) ) * 8 ) +
( ( strtoint64( copy( pis, 9, 1 ) ) ) * 7 ) +
( ( strtoint64( copy( pis, 10, 1 ) ) ) * 6 ) +
( ( strtoint64( copy( pis, 11, 1 ) ) ) * 5 ) + 2;
resto:= soma mod 11;
dv := 11 - resto;
resultado:= pis + [ô]001[ô] + inttostr( dv );
end
else
resultado:= pis + [ô]000[ô] + inttostr( dv );


if Num <> resultado then
result := false
else
result := true;

end;


[txt-color=#08088A]----->>> SEGUNDA FUNÇÃO[/txt-color]


Function ValidaCNS_PROV(Num: string):Boolean;
var
pis : string;
resto : integer;
dv : integer;
soma : int64;
resultado : string;

begin
soma:= ( ( strtoint64( copy( Num, 1, 1 ) ) ) * 15 ) +
( ( strtoint64( copy( Num, 2, 1 ) ) ) * 14 ) +
( ( strtoint64( copy( Num, 3, 1 ) ) ) * 13 ) +
( ( strtoint64( copy( Num, 4, 1 ) ) ) * 12 ) +
( ( strtoint64( copy( Num, 5, 1 ) ) ) * 11 ) +
( ( strtoint64( copy( Num, 6, 1 ) ) ) * 10 ) +
( ( strtoint64( copy( Num, 7, 1 ) ) ) * 9 ) +
( ( strtoint64( copy( Num, 8, 1 ) ) ) * 8 ) +
( ( strtoint64( copy( Num, 9, 1 ) ) ) * 7 ) +
( ( strtoint64( copy( Num, 10, 1 ) ) ) * 6 ) +
( ( strtoint64( copy( Num, 11, 1 ) ) ) * 5 ) +
( ( strtoint64( copy( Num, 12, 1 ) ) ) * 4 ) +
( ( strtoint64( copy( Num, 13, 1 ) ) ) * 3 ) +
( ( strtoint64( copy( Num, 14, 1 ) ) ) * 2 ) +
( ( strtoint64( copy( Num, 15, 1 ) ) ) * 1 );

resto:= soma mod 11;
if resto <> 0 then
result := false
else
result := true;
end;
ASHKATCHUP 24/09/2009 13:28:42
#323579
Ja fiz a conversão da primeira. Poderia postar um CNS válido e um inválido para que eu teste?
TECLA 24/09/2009 13:35:27
#323580
Comece por aqui

StrToInt64 = Int() ou CDbl()
Copy = Mid()
OLAFEKORKAN 24/09/2009 13:42:48
#323581
Pra você entender melhor o porque de duas funções:
A primeira é para números CNS definitivos.
A segunda é para números CNS provisórios.


[txt-color=#df0101]**** SOMENTE PARA A FUNÇÃO ValidaCNS****:[/txt-color]
[txt-color=#0080FF]Válido= 200207298410009[/txt-color]
[txt-color=#df0101] Não Válido= 200207298410147[/txt-color]


[txt-color=#df0101]**** SOMENTE PARA A FUNÇÃO ValidaCNS_PROV ****:[/txt-color]
[txt-color=#0080FF]Válido= 898000443631796[/txt-color]
[txt-color=#df0101] Não Válido= 898000443631142[/txt-color]
ASHKATCHUP 24/09/2009 13:49:22
#323582
Com os exemplos que você passou, a primeira funcionou. Vou começar a converter a segunda agora. Porém, preciso de mais números válidos. De preferência, um que possua o [Ô]dv[Ô] 10, para entrar na [Ô]segunda parte[Ô] da função.
ROBIU 24/09/2009 13:52:35
#323583
Não precisa converter. Veja neste Link a função para java, delph e vb6. Peguei a função e testei os números. Funcionou blz.
Tópico encerrado , respostas não são mais permitidas