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