Bob Osborn asked:

> That's handy!  On a similar thread - does anyone have the algorithm for
> validating IRD numbers?  I had it a few years ago and somehow lost it.

Here in all its glory is an IRD number validator. I implemnted this from the
IRD documentation and it appears to validate IRD numbers correctly. Use at
your own risk and further testing is recommended.

Oddly enough after all the effort I put in writing it we have never used
this in any released application!

procedure ValidateIRDNumber(Number: Integer);
const
  IRDDigitCount = 7;
  ErrorMessage = 'Invalid IRD Number';
type
  IRDArray = array[1..IRDDigitCount] of ShortInt;
const
  IRDCheck1: IRDArray = (2, 7, 6, 5, 4, 3, 2);
  IRDCheck2: IRDArray = (4, 3, 2, 5, 2, 7, 6);
var
  IRDNumber: LongInt;
  CheckDigit: Integer;
  Digits: IRDArray;
  exp: Integer;

  function CalcCheckDigit: Integer;
  var
    Check1: Integer;
    Check2: Integer;
    exp: Integer;
  begin
    Check1 := 0;
    Check2 := 0;
    for exp := 1 to IRDDigitCount do
      begin
        inc(Check1, Digits[exp] * IRDCheck1[exp]);
        inc(Check2, Digits[exp] * IRDCheck2[exp])
      end;
    Result := Check1 mod 11;
    if Result = 0 then
      Exit;
    Result := 11 - Result;
    if Result = 10 then
      begin
        Result := Check2 mod 11;
        if Result = 0 then
          Exit;
        Result := 11 - Result;
        if Result = 10 then
          raise Exception.Create(ErrorMessage)
      end
  end;

begin
  IRDNumber := Number;

  if IRDNumber < 0 then
    raise Exception.Create(ErrorMessage);

  CheckDigit := IRDNumber mod 10;
  IRDNumber := IRDNumber div 10;
  for exp := IRDDigitCount downto 1 do
    begin
      Digits[exp] := IRDNumber mod 10;
      IRDNumber := IRDNumber div 10;
    end;

  if (IRDNumber > 0) or (CheckDigit <> CalcCheckDigit) then
    raise Exception.Create(ErrorMessage)
end;

Cheers, Max.


---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/

Reply via email to