站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题哪位高手会写组织机构的校验代码?

哪位高手会写组织机构的校验代码?

摘要: 哪位高手会写组织机构的校验代码?


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


楼主的表述可能不太明确,我看了一遍,有些问题:

需求可能是这样的:组织机构代码是一个长度为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……



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;


↑返回目录
前一篇: 为什么是空值呀?帮忙看看!
后一篇: 初学java的迷惑?