C语言版的单位法人代码校验函数

多年没和统计报表打交道了,不知现在还存不存在单位法人代码,反正十年前是每个单位,无论是机关、企事业单位还是社会团体,都要求有这个代码。

当作怀旧,贴出这个十多年前C语言函数代码,现临时写了个演示程序:

#include < stdio.h >
#include
< string.h >
#include
< stdlib.h >

/* 获取单位法人代码校验位 */
char GetLegalPersonCheckCode( char * code)
{
const int Value[] = { 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 };
int x,check = 0 ;
for (x = 0 ;x < 8 ;x ++ )
{
if (code[x] >= ' 0 ' && code[x] <= ' 9 ' )
check
+= (code[x] - ' 0 ' ) * Value[x];
else if (code[x] >= ' a ' && code[x] <= ' z ' )
check
+= ( 10 + code[x] - ' a ' ) * Value[x];
else if (code[x] >= ' A ' && code[x] <= ' Z ' )
check
+= ( 10 + code[x] - ' A ' ) * Value[x];
}
check
= 11 - (check % 11 );
switch (check)
{
case 10 :
check
= ' X ' ;
break ;
case 11 :
check
= ' 0 ' ;
break ;
default :
check
+= ' 0 ' ;
}
return check;
}

int main( int argc, char * argv[])
{
char lpCode[ 10 ];
printf(
" 请输入要验证的单位法人代码: " );
scanf(
" %s " ,lpCode);
if (strlen(lpCode) != 9 )
printf(
" 输入的单位法人代码位数错误! " );
else if (GetLegalPersonCheckCode(lpCode) != lpCode[ 8 ])
printf(
" 输入的单位法人代码校验位错误! " );
else
printf(
" 单位法人代码%s正确 " ,lpCode);
system(
" pause " );
return 0 ;
}

我是搞统计的,以前又是单位的计算机管理负责人,同统计报表打交道最多,每次各统计专业月报、年报以及各种统计普查时,统计报表上都印有这个代码,代码印刷格式为:XXXXXXXX-X,“-”左边是8位数字代码,右边是1位校验码(0 -- 9或者X),每个代码位都印有一个小方框,真正输入时只输入9位代码,“-”是不输入的。

例子很简单,要求输入一个单位法人代码,然后检查输入的代码长度是否为9,然后调用GetLegalPersonCheckCode函数获取该代码的校验位,并与输入的代码校验码比较。

可能有人注意到我上面说左边是8位数字代码,而函数计算中却有a - z和A - Z等字母,这是因为当初有很多单位来不及从技术监督部门获取单位代码,而各种统计报表又必须要填单位代码,所以,统计部门一般以2位字母打头,后面跟6位数字,组成临时单位代码的缘故。

其实,因为该函数利用8位单位代码计算并返回其校验码,不仅能起到验证单位法人代码的作用,也可用来计算单位法人代码,只不过正式的单位代码只能由技术监督部门审核发放,以保证在全国范围内所有的单位代码都是唯一的,作为统计部门,我们只用它来计算临时单位代码。

你可能感兴趣的:(C++,c,C#)