组织机构代码验证
来源:互联网 发布:美国生孩子好处 知乎 编辑:程序博客网 时间: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; }