Const w_table: Array[1..18] of word = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); m_table: Array[0..10] of word = (1,0,0,9,8,7,6,5,4,3,2);
TYPE buffer = ARRAY[1..256] OF BYTE;
Function CalcMy_x(aStr:string):String; var i,len:integer; aMod,Sum,Wi:integer; myx:string; begin sum := 0; len := length(astr); If len = 0 then Exit; //len := len - 1; For I:=1 to len do begin Wi := Round(Exp((len-i+1)*ln(2))) mod 11; //X^y=Exp(y*ln(X)); Sum := sum + Wi*Strtoint(astr[i]); //Sum := sum + W_table[i]*Strtoint(astr[i]); end; aMod := sum mod 11; If amod = 2 then myx := 'X' else begin aMod := m_table[amod]; myx := inttostr(aMod); end; Result := myx; end;