请求帮忙翻译代码

messah 2010-03-04 03:59:50
因工作需要,程序中需要对企业的税号合法性进行校验,晚上没搜到DELPHI的代码,但是搜到如下的代码,哪位大大帮忙翻译成delphi的代码啊。谢谢。

在贴子看到身份证号程序,实际上企业纳税号应用比较广泛
*********************************************************************
*
*函数过程:nshxm
*用途:校验企业纳税号是否正确
*
*********************************************************************
Parameter nsh
c = ""
nsh = Alltrim(nsh)
If Len(nsh)<>15
= Messagebox("纳税号应有15位!", 48, "纳税号错误")
Return
Endif
For I = 1 To 6
If Not Isdigit(Substr(nsh, I, 1))
= Messagebox("纳税号前6位非法!", 48, "纳税号错误")
Return
Endif
Endfor
N = 0
For I = 7 To 15
If Isdigit(Substr(nsh, I, 1))
N = N+1
Endif
Endfor
For I = 7 To 14
If Substr(nsh, I, 1)="O" Or Substr(nsh, I, 1)="Z" Or Substr(nsh, I, 1)="I" Or Substr(nsh, I, 1)="S"
Return
Endif
Endfor
c = xm(nsh)
If c=Substr(nsh, 15, 1)
= Messagebox("ok!", 64, "纳税号正确")
Else
= Messagebox("纳税号非法!最后一位应为:"+c, 48, "纳税号错误")
Endif
Return

Function xm
Parameter nsh
Dimension z( 9)
I = 1
z( 1) = 3
z( 2) = 7
z( 3) = 9
z( 4) = 10
z( 5) = 5
z( 6) = 8
z( 7) = 4
z( 8) = 2
z( 9) = 0
For I = 1 To 8
z( 9) = z(9)+Gx(Substr(nsh, I+6, 1))*z(I)
Endfor
z( 9) = 11-Mod(z(9), 11)
If z(9)=10
Return "X"
Endif
If z(9)=11
Return "0"
Endif
Return Alltrim(Str(z(9)))

Function Gx
Parameter xm
If Asc(xm)>=48 And Asc(xm)<=57
Return Asc(xm)-48
Endif
Return Asc(xm)-Asc("A")+10
...全文
97 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
a68351153 2010-03-09
  • 打赏
  • 举报
回复
先把代码保存起来,说不定那一天我也用得上
静远 2010-03-04
  • 打赏
  • 举报
回复

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;
柯本 2010-03-04
  • 打赏
  • 举报
回复
随手改了一下,能编译运行,是否有错LZ验证一下
Function Gx(xmc:char):integer;
begin
If (ord(xmc)>=48) And (ord(xmc) <=57) then
begin
result:= ord(xmc)-48 ;
exit;
end;
result:=ord(xmc)-ord('A')+10;
end;

Function xm(nsh:string):char;
var
z:array [1..9] of integer;
i:integer;
begin
// I := 1; //这行多余
z[ 1] := 3 ;
z[ 2] := 7 ;
z[ 3] := 9 ;
z[ 4] := 10 ;
z[ 5] := 5 ;
z[ 6] := 8 ;
z[ 7] := 4 ;
z[ 8] := 2 ;
z[ 9] := 0 ;
For I := 1 To 8 do
z[9] := z[9]+Gx(nsh[I+6])*z[I];
z[9] := 11- z[9] mod 11;
If z[9]=10 then
begin
result:='x';
exit;
end;
If z[9]=11 then
begin
result:= '0';
exit;
end;
result:=chr(z[9]+ord('0'));
end;


procedure nshxm(nsh:string);
var
c:char;
i,n:integer;
begin
// c := '';
nsh := trim(nsh);
If Length(nsh) <>15 then
begin
Messagebox(0,'纳税号应有15位!', '纳税号错误',0);
exit;
end;
For I := 1 To 6 do
begin
if (nsh[I]<'0') and (nsh[I]>'9') then
begin
Messagebox(0,'纳税号前6位非法!', '纳税号错误',0);
exit;
end;
end;
N := 0 ;
For I := 7 To 15 do
begin
if (nsh[I]>='0') and (nsh[I]<='9') then
INC(N);
end;
For I := 7 To 14 do
begin
If (nsh[I]='O') Or (nsh[I]='Z') Or (nsh[I]='I') Or (nsh[I]='S') then
exit;
end;
c := xm(nsh) ;
If c=nsh[15] then
Messagebox(0,'ok!', '纳税号正确',0)
else
Messagebox(0,pchar('纳税号非法!最后一位应为:'+c),'纳税号错误',0);
end;

JeffChung 2010-03-04
  • 打赏
  • 举报
回复
看起来不是很难。。。。楼主自己试着翻呗,都是文本的操作多

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧