组织机构代码验证

来源:互联网 发布:美国生孩子好处 知乎 编辑:程序博客网 时间:2024/04/25 13:12
/// <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;    }