Ver Mensaje Individual
  #3  
Antiguo 24-07-2010
waly2k1 waly2k1 is offline
Miembro
 
Registrado: dic 2006
Ubicación: El país de las maravillas(Argentina)
Posts: 251
Reputación: 18
waly2k1 Va por buen camino
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;
Responder Con Cita