Hola mcs, desde ya muchas gracias por contestar
Esta es una Destinacion valida: '10042EC01004391D'
y te paso mi rutina
recorro la cadena (sDest) y voy cargando en el array mediante un for
porque desconozco las funciones para hacerlo mas 'comodo'
Pero el primer elemento del array pone 1 y el segundo q deberia ser 0 vuelve a repetir 1 y recien continua cargando bien, con lo cual me faltaria
un item (la D final) y desde el vamos que es invalida si no posee el digito
verificador. Estoy viendo eso ahora, pero si me trabo mucho mas le agrego un elemento mas al array y comienzo a contar desde el segundo elemento y listo. No puedo detenerme demasiado.
Saludos y muchisimas gracias!!!
Código:
function TData.ValDestinacion( sDest:string; blnMSG:boolean ):boolean;
var
i: integer;
j: integer;
k: integer;
aNro:array[0..15] of Char;
iSuma: Integer;
begin
iSuma := 0;
i := Pos( 'MANE', sDest );
sDest := ReplaceStr( sDest, 'MANE', 'MANI' );
if Length( sDest ) <> 16 then
begin
Result := false;
exit;
end;
for i := 0 to 15 do
begin
aNro[i] := Chr( Ord( Copy( sDest, i, 1 )[1] ) );
end;
j := 0;
for k := 0 to 14 do
begin
j := j + Ord( aNro[k] );
end;
k := ( j mod 23 ) + 65;
if i <> 0 then
begin
k := k + 1;
end;
case k of
73:
begin
k:= 78;
end;
79:
begin
k:= 89;
end;
81:
begin
k:= 90;
end;
91:
begin
k:= 65;
end;
end;
Result := ( k = Ord( aNro[15] ) );
end;