组织机构代码验证

/// <summary>
    /// 验证是否是合法 
    /// </summary>
    /// <param name="Code"></param>
    /// <returns></returns>
    public static bool IsRegCode(string Code)
    {
        bool flag = true;
        if (Code.Length==10)
        {
            string left = Code.Substring(0, 8);//得到前八位
            string center = Code.Substring(8, 1);
            string right = Code.Substring(9, 1);
            if (Regex.IsMatch(left, @"^[1-9a-zA-Z]") && center == "-" && Regex.IsMatch(right, @"^[1-9a-zA-Z]"))//0/X
            {
                //分别得到每一位的值
                string l1 = left.Substring(0, 1);
                string l2 = left.Substring(1, 1);
                string l3 = left.Substring(2, 1);
                string l4 = left.Substring(3, 1);
                string l5 = left.Substring(4, 1);
                string l6 = left.Substring(5, 1);
                string l7 = left.Substring(6, 1);
                string l8 = left.Substring(7, 1);
                int result = Convert.ToInt32(GetYinZi(l1)) * 3 + Convert.ToInt32(GetYinZi(l2)) * 7 + Convert.ToInt32(GetYinZi(l3)) * 9 + Convert.ToInt32(GetYinZi(l4)) * 10 + Convert.ToInt32(GetYinZi(l5)) * 5 + Convert.ToInt32(GetYinZi(l6)) * 8 + Convert.ToInt32(GetYinZi(l7)) * 4 + Convert.ToInt32(GetYinZi(l8)) * 2;
                ///当余数为1 校验码为10的时候,校验码应用大写拉丁字母“X”表示;当余数为0 校验码为11的时候,校验码仍用“0”表示;当校验码为1至9时,校验码直接用校验码的值表示
                string last = "";
                int ys = result % 11;//余数
                int jym = 11 - ys;//校验码
                if (jym >= 0 && jym <= 9)
                    last = jym.ToString();
                else if (ys == 1 && jym == 10)
                    last = "X";
                else if (ys == 0 && jym == 11)
                    last = "0";
                if (right==last)
                    flag = true;
                else if (right != last)
                    flag = false;
            }
        }
        else
        {
            flag = false;
        }
        return flag;
    }
    private static string GetYinZi(string value)
    {
        string str = "";
        switch (value.ToUpper())
        {
            case "A":
                str = "10";
                break;
            case "B":
                str = "11";
                break;
            case "C":
                str = "12";
                break;
            case "D":
                str = "13";
                break;
            case "E":
                str = "14";
                break;
            case "F":
                str = "15";
                break;
            case "G":
                str = "16";
                break;
            case "H":
                str = "17";
                break;
            case "I":
                str = "18";
                break;
            case "J":
                str = "19";
                break;
            case "K":
                str = "20";
                break;
            case "L":
                str = "21";
                break;
            case "M":
                str = "22";
                break;
            case "N":
                str = "23";
                break;
            case "O":
                str = "24";
                break;
            case "P":
                str = "25";
                break;
            case "Q":
                str = "26";
                break;
            case "R":
                str = "27";
                break;
            case "S":
                str = "28";
                break;
            case "T":
                str = "29";
                break;
            case "U":
                str = "30";
                break;
            case "V":
                str = "31";
                break;
            case "W":
                str = "32";
                break;
            case "X":
                str = "33";
                break;
            case "Y":
                str = "34";
                break;
            case "Z":
                str = "35";
                break;
            default:
                str = value;
                break;
        }
        return str;
    }

猜你喜欢

转载自blog.csdn.net/love33jing2012/article/details/8256111