C语言版的单位法人代码校验函数
来源:互联网 发布:甲醛清除剂 知乎 编辑:程序博客网 时间:2024/04/28 09:26
多年没和统计报表打交道了,不知现在还存不存在单位法人代码,反正十年前是每个单位,无论是机关、企事业单位还是社会团体,都要求有这个代码。
当作怀旧,贴出这个十多年前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;
}
#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语言版的单位法人代码校验函数
- CRC32和CRC8校验代码,C语言版
- 指尖上的代码[C语言版]-<1>
- 指尖上的代码[C语言版]-<2>
- 指尖上的代码[C语言版]-<3>
- 指尖上的代码[C语言版]-<4>
- 指尖上的代码[C语言版]-<5>
- C语言版的线性回归分析函数
- C语言版的线性回归分析函数
- C语言版的线性回归分析函数
- C语言版的线性回归分析函数
- CRC16校验的C代码
- CRC32校验算法C语言版(查表法)
- 函数,C/C++语言的单位
- 指尖上的代码[C语言版]-<7>数据结构之单链表
- C语言版的日历
- C语言版的磁盘文件分片归并排序函数
- C语言版的磁盘分片归并排序函数
- PHP4.23在WindowsXP下的IIS和Apache2两种服务器上的安装实例
- pl/sql交叉表
- Apache2服务器上的安装实例
- ASP.NET 开发WAP网站
- 2007年 逝者如斯乎
- C语言版的单位法人代码校验函数
- net2.0连接池最大连接数设置
- 图的存储结构
- 130道ASP.NET面试题
- sql数据库连接串里的packet size的意义和用途
- 利用PHP-ExcelReader实现PHP导入Excel数据[不通过CSV]
- 用人之道
- 今天是驾校学习的最后一天课了
- Selenium学习笔记