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/