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/