您的位置:首页 > 编程语言 > C#

组织机构代码校验码生成算法(C#版)

2017-02-24 16:39 309 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OrganizationCode
{
class Program
{
public static void Main(string[] args)
{
string y_bm = "71774346";
//y_bm = "71774346-9";
//y_bm = "73767624-0";
//y_bm = "74549579-X";
y_bm = "74610229-x";
Console.WriteLine(y_bm);
string bm = Code9(y_bm);
Console.WriteLine(bm);

}
//组织机构代码校验码(验证程序)
//组织机构代码71774346-9,73767624-0
//规定本体代码PDY00001至PDY99999为自定义区,供各系统编制内部组织机构代码使用。
//自定义区内编制的组织机构代码不作为个系统之间信息交换的依据
//组织机构代码管理办法  编制规则
//校验码按照以下公式计算:
/*C9=11-MOD(∑Ci(i=1→8)×Wi,11)
式中: MOD——代表求余函数;
i——代表代码字符从左至右位置序号;
Ci——代表第i位上的代码字符的值(具体代码字符见附表);
C9——代表校验码;
Wi——代表第i位上的加权因子,其数值见下表:
i=1,2,3,4,5,6,7,8
Wi=3,7,9,10,5,8,4,2
当C9的值为10时,校验码应用大写的拉丁字母X表示;当C9的值为11时校验码用0表示。
*/
//代码字符机器处理字符数值
// 0 0   1 1  9 9 A 10 B 11  Z 35
public static string Code9(string str_in)
{
string rbc = "";
//W权位
int[] wArray = new int[] { 3, 7, 9, 10, 5, 8, 4, 2 };
string str_in_U = str_in.ToUpper();
char c;
int zz = 0, z = 0;
for (int i = 0; i <= 7; i++)
{
c = char.Parse(str_in.Substring(i, 1));
if (c >= 'A' && c <= 'Z')  //A-Z字符
{
z = ((int)c - 55) * wArray[i];
}
else if (c >= '0' && c <= '9')  //0-9字符
{
z = int.Parse(c.ToString()) * wArray[i];
}
else
{
rbc = "Err不能输入其他字符错误码";
return rbc;
}
zz += z;
}
string C9 = "";
int jav = 11 - (zz % 11);
if (jav == 10)
{
C9 = "X";
}
else if (jav == 11)
{
C9 = "0";
}
else
{
C9 = jav.ToString().Trim(); //删除文本前导空格
}
rbc = str_in.Substring(0, 8) + "-" + C9;//全国组织机构代码8位本体位加一个校验位
return rbc;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: