以下內容由 Helmut Dollinger 提供:

function ValidISBN(aISBN: string): boolean; 
   var hNumber, 
       hCheckDigit: string; 
       hCheckValue, 
       hCheckSum, 
       Err: integer; 
       i,Cnt: Word; 
   begin 
     Result := false; 
     hCheckDigit := Copy(aISBN, Length(aISBN), 1); 
     {Get rest of ISBN, minus check digit and its hyphen} 
     hNumber := Copy(aISBN, 1, Length(aISBN) - 2); 
     {Length of ISBN remainder must be 11 and check digit 
      between 9 and 9 or X} 
     if (Length(hNumber)=11)and(Pos(hCheckDigit, 
         '0123456789X') > 0) then 
     begin 
       {Get numeric value for check digit} 
       if (hCheckDigit = 'X') then 
         hCheckSum := 10 
       else Val(hCheckDigit, hCheckSum, Err); 
       {Iterate through ISBN remainder, applying decode 
        algorithm} 
       Cnt := 1; 
       for i := 1 to 12 do 
       begin 
         {Act only if current character is between "0" and "9" 
          to exclude hyphens} 
         if (Pos(hNumber[i], '0123456789') > 0) then 
         begin 
           Val(hNumber[i], hCheckValue, Err); 
           {Algorithm for each character in ISBN remainder, Cnt 
            is the nth character so processed} 
           hCheckSum := hCheckSum + hCheckValue * (11 - Cnt); 
           Inc(Cnt); 
         end; 
       end; 
       {Verify final value is evenly divisible by 11} 
       if (hCheckSum mod 11 = 0) then Result := true 
       else Result := false; 
     end; 
   end; 


This is how it works. 

A valid ISBN is: '0-672-31285-9'. Every digit is multiplied with the number of its position and than add up: 0*10 + 6*9 + 7*8 + 2* 7 etc. If the result is divisible trough 11 then the ISBN is valid! 

    Source: geocities.com/huanlin_tsai/faq

               ( geocities.com/huanlin_tsai)