組織機構代碼校驗碼生成算法(C#版)


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;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM