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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值