Buongiorno,
mi sono appena iscritto al forum per avere un aiuto da parte vostra,
ho qualche conoscenza di programmazione in Delphi, e dovevo trasportare una semplice funzione da C# a Delphi, è una funzione che esegue un calcolo di controllo su una stringa, dovrebbe abbastanza semplice, ma non riesco ad ottenere il valore che dovrei.
Chi ha ricavato questo piccolo algoritmo è sicuro che il risultato di questa funzione eseguita su questa stringa:
CHECKSUMME02B2 dia come risultato
S,
io non ho modo di testarla direttamente in C#, se qualcuno può cortesemente testarla
la funzione in oggetto è la seguente:
public char CalculateCheckDigit(string text)
{
string characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int position = 0;
for (int i = 0; i < text.Length; i++)
{
int index = characters.IndexOf(text[i]);
if (i % 2 == 0)
index *= 3;
position += index;
}
position %= 36;
return characters[position];
}
io l'ho "tradotta" così
function CalculateCheckDigit(sText: string): char;
var
i, index, iPosition: integer;
characters: string;
begin
characters:= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
iPosition:= 0;
for i:= 0 to length(sText) do
begin
index:= pos(sText[i], characters);
if i mod 2 = 0 then
begin
index:= index * 3;
end;
iPosition:= iPosition + index;
end;
iPosition:= iPosition mod 36;
result:= characters[iPosition];
end;
A questo punto mi sorgono due dubbi, il primo è che il carattere [0] di una variabile stringa, in questo caso characters[0] non contiene il carattere '0', ma questo è contenuto del characters[1] ,
poi, leggendo la mia trauzione, non riesco ad individuare cosa fa se (i mod 2 = 0) è diverso da Zero.
le cifre di controllo che riporto qui di seguito sono sicure perchè lette all'interno del file che sto esaminando:
($CHECKSUMME AA5B L) il CalculateCheckDigit dovrebbe essere fatto su: CHECKSUMMEAA5B e restituire L
($CHECKSUMME 9EDD C) il CalculateCheckDigit dovrebbe essere fatto su: CHECKSUMME9EDD e restituire C
grazie in anticipo