JSP的录入界面上有一个组织机构代码的textbox录入框,要去录入后,当保存记录时进行校验,不符合规则的给予提示。哪位高手能根据下面的规则,用JAVA写个校验的函数呀?多谢!
组织机构的录入是有一定规则的,规则如下:
组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码标识。 
最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。校验码按下列公式计算: 

C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2) 
i=1 
其中:MOD —— 表示求余函数; 
i —— 表示代码字符从左到右位置序号; 
Ci —— 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符; 
C9 —— 表示校验码; 
Wi —— 表示第i位置上的加权因子,其数值如下表: 
i 1 2 3 4 5 6 7 8 
Wi 3 7 9 10 5 8 4 2 
当MOD函数值为1(即 C9 = 10)时,校验码用字母X表示。

解决方案 »

  1.   

    楼主的表述可能不太明确,我看了一遍,有些问题:需求可能是这样的:组织机构代码是一个长度为9的字符串,前8位叫做本体代码,最后一位校验码,楼主希望可以从用户输入的前8位代码中按照公式求出一个校验码,和用户输入的第9位校验码对照进行判定。也就是说楼主希望把那个公式用Java实现。那个公式应该是C9=11-MOD(Ci*Wi,11)吧?后面那个···(2)是公式内容么?
    还有就是第一行的那个8代表什么?第三行的i=1又是什么?按照楼主的描述,本体代码可以是拉丁字符,那么Ci*Wi怎么取值?附录A是什么也不知道。另外本体代码是8位的,也就是说i的取值可以是1~8,那公式中的Ci,Wi取那个值?还是说要把8个都算一遍才能知道C9……
      

  2.   

    hehe ,太仓促了。多多包含
    这段验证我有DELPHI写的,谁能改成JAVA的?
    function dwdmjym(dwdm:string;var ReChar:Char):Boolean;
    const
     Wi: array[1..8] of string = ('3','7','9','10','5','8','4','2');
     ai: array[0..35] of string = ('0','1','2','3','4','5','6','7','8','9','A',
                                   'B','C','D','E','F','G','H','I','J','K','L',
                                   'M','N','O','P','Q','R','S','T','U','V','W',
                                   'X','Y','Z');
     bi: array[0..35] of string = ('0','1','2','3','4','5','6','7','8','9','10',
                                   '11','12','13','14','15','16','17','18','19','20','21',
                                   '22','23','24','25','26','27','28','29','30','31','32',
                                   '33','34','35');
       function GetAi(S:Char):string;
       var I:integer;
       begin
          Result :='';
          for I:=0 to 35 do
             if S=ai[I] then
             begin
                Result :=bi[I];
                Break;
             end;
       end;
    var
       J,Sum,ModResult:integer;
       S:string;
    begin
       Result:=True;
       Sum:=0;
       for J:=1 to Length(dwdm) do
          begin
             S:=GetAi(dwdm[J]);
             if S='' then
             begin
                Result :=False;
                Break;
             end;
             Sum:=Sum+strtoint(S)*strtoint(Wi[J]);
          end;
       if not Result then Exit;
       ModResult:=Sum mod 11;
       if ModResult=1 then ReChar:='X'
       else if ModResult=0 then ReChar:='0'
       else begin
          S :=inttostr(11-ModResult);
          ReChar:=S[1];
       end;
    end;function dwdmjy(dwdm:string):Boolean;
    var ReChar:Char;
    begin
       Result :=dwdmjym(Copy(dwdm,1,8),ReChar);
       if Result then
          if ReChar<>dwdm[9] then Result :=False;
    end;