publicstaticstringsmethod_0(string string_0) { if (string_0.IndexOf('-') < 0)//检查注册代码中是否有- { return string_0; } string str = "DBV"; string_0 = string_0.Replace("-", string.Empty);//将字符-转为空 string_0 = string_0.Replace('Q', '4');//Q转为4 string_0 = string_0.Replace('G', '4');//G转为4 string_0 = string_0.Replace('V', '0');//V转为0 string_0 = string_0.Replace('N', '3');//N转为3 str + string_0;//无用语句 byte[] array = newbyte[string_0.Length / 2];//新建个数组,长度是去掉-后的注册码长度的一半 for (int i = 0; i < string_0.Length; i += 2) { byte b; byte.TryParse(newstring(newchar[] { string_0[i], string_0[i + 1] }), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out b);//每两位进行拼接并转回字符串形式并依次存入b array[i / 2] = b; } string text = Encoding.ASCII.GetString(array);//将注册码转为字符串形式,传入的注册码为hex后的ascii值 text = text.Insert(1, ":");//第2位插入: text = text.Insert(5, ":");//第6位插入: text = text.Insert(9, ":");//第10位插入: if (text.Length > 13) { text = text.Insert(13, ":");//如果注册码长度大于13则在第13位插入: } return text; }
Class2.smethod_1方法,
publicstaticboolsmethod_1(string string_0) { bool flag = true; string a = string_0.Substring(4, 5);//取经过smethod_0处理后的字符串中的第4到8位 //如果a为IALV或注册码第一位不为F或第3位转为int型大于16或a不为I:ALV或注册码第4位转为int型大于16则抛出注册码错误 if (a == "IALV") { flag = false; } if (string_0[0] != 'F') { flag = false; } int num = int.Parse(string_0[2].ToString(), NumberStyles.HexNumber); if (num > 16) { flag = false; } if (a != "I:ALV") { flag = false; } num = int.Parse(string_0[3].ToString(), NumberStyles.HexNumber); if (num > 16) { flag = false; } if (!int.TryParse(string_0.Substring(10, 3), out num)) { flag = false; } //处理后的注册码如果长度小于14则抛错 if (string_0.Length <= 14) { thrownew ApplicationException("Invalid Unlock Code"); } //命名num2变量,值为注册码的第15位,并判断num2是否为2或3,不是就抛错 int num2 = int.Parse(string_0.Substring(15, 1)); if (num2 != 2 && num2 != 3) { thrownew ApplicationException("Incorrect Code for Version"); } string s = string_0.Substring(0, 16);//s为1~17位 string b = string_0.Substring(16);//b为17位后的校验位 int num3 = 0; byte[] bytes = Encoding.ASCII.GetBytes(s);//将s转为字节码并存入数组 for (int i = 0; i < bytes.Length; i++) { if (bytes[i] % 2 == 0)//每一位进行模2运算,为0则num3+1 { num3++; } } return !(num3.ToString("00") != b) && flag;//num3向上取整后与校验位作比较,比较成功则返回真 }