16,748
社区成员
发帖
与我相关
我的任务
分享
procedure TForm26.Button1Click(Sender: TObject);
var
s : string;
i, num : Integer;
begin
s := Trim(Edit1.Text);
if s = '' then Exit;
if Length(s) <> 15 then
begin
ShowMessage('纳税号应为15位!');
Exit;
end;
if not TryStrToInt(Copy(s, 0, 6), num) then
begin
ShowMessage('纳税号前六位应为数字!');
Exit;
end;
for i := 7 to 14 do
begin
if (Copy(s, i, 1) = 'O') or (Copy(s, i, 1) = 'Z') or (Copy(s, i, 1) = 'I') or (Copy(s, i, 1) = 'S') then
begin
ShowMessage(Copy(s, i, 1));
Exit;
end;
end;
if CompareStr(Copy(s, 15, 1), GetXM(s)) = 0 then
ShowMessage('正确!' + ' ' + Copy(s, 15, 1) + ' ' + GetXM(s))
else
ShowMessage('错误!' + ' ' + Copy(s, 15, 1) + ' ' + GetXM(s));
end;
function TForm26.GetASCII(chr: Char): Integer;
begin
if (Ord(chr) >= 48) and (Ord(chr) <= 57) then
Result := Ord(chr) - 48
else
Result := Ord(chr) - Ord('A') + 10;
end;
function TForm26.GetXM(str: string): string;
const
Arr : array[1..8] of Integer = (3, 7, 9, 10, 5, 8, 4, 2);
var
i : Integer;
num : Integer;
begin
num := 0;
for i := 1 to 8 do
begin
num := num + GetASCII(str[i + 6]) * Arr[i];
end;
num := 11 - num mod 11;
if num = 10 then
Result := 'X'
else
if num = 11 then
Result := 'O'
else
Result := IntToStr(num);
end;