winform 注册码+注册表保存

我所使用的注册码方法只是基于本地的CPUID与硬盘的编码并进行.开发人员使用SoftReg 类根据唯一机器码生成唯一注册码,发给客户,客户注册之后就可以用,注册未成功时会在本地注册表生成一个使用次数,注册成功则生成一个指示注册成功的值或者直接保存注册码在本地注册表中也是可以的

   private int[] intCode = new int[127];       //  存储密钥
   private char[] charCode = new char[25];     //  存储机器码字
   private int[] intNumber = new int[25];      //  存机器码的Ascii值
   /// <summary>
   /// 获取CPU
   /// </summary>
   /// <returns>CPU字符串</returns>
   public string getCPU()
   {
       string strCPU = null;
       ManagementClass myCPU = new ManagementClass("win32_Processor");
       ManagementObjectCollection myCPUConnection = myCPU.GetInstances();
       foreach (ManagementObject myObject in myCPUConnection)
       {
           strCPU = myObject.Properties["Processorid"].Value.ToString();
           break;
       }
       return strCPU;
   }
   /// <summary>
   /// 获取卷轴字符串
   /// </summary>
   /// <returns>卷轴字符串</returns>
  public string GetDiskVolumeSerialNumber()
   {
       ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
       ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
       disk.Get();
       return disk.GetPropertyValue("VolumeSerialNumber").ToString();
   }
   /// <summary>
   /// 得到机器码
   /// </summary>
   /// <returns>机器码</returns>
   public string getMNum()
   {
       string strNum = getCPU() + GetDiskVolumeSerialNumber();     //获得24位Cpu和硬盘序列号
       string strMNum = strNum.Substring(0, 24);                   //从生成的字符串中取出前24个字符做为机器码
       return strMNum;
   }
   /// <summary>
   ///  获得注册码
   /// </summary>
   /// <returns>注册码字符串</returns>
   public string getRNum()
   {
       SetIntCode();
       string strMNum = getMNum();
       for (int i = 1; i < charCode.Length; i++)   //存储机器码
       {
           charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));
       }
       for (int j = 1; j < intNumber.Length; j++)  //改变ASCII码值
       {
           intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];
       }
       string strAsciiName = "";   //注册码
       for (int k = 1; k < intNumber.Length; k++)  //生成注册码
       {

           if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]
               <= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122))  //判断如果在0-9、A-Z、a-z之间
           {
               strAsciiName += Convert.ToChar(intNumber[k]).ToString();
           }
           else if (intNumber[k] > 122)  //判断如果大于z
           {
               strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();
           }
           else
           {
               strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();
           }
       }
       return strAsciiName;
   }
   /// <summary>
   /// 给数组赋值小于10的数
   /// </summary>
   public void SetIntCode()
   {
       for (int i = 1; i < intCode.Length; i++)
       {
           intCode[i] = i % 9;
       }
   }

这些函数就可以生产机器码和注册码
根据客户发回的机器码则生成注册码了

 private void MainForm_Load(object sender, EventArgs e)
 {
       try
       {
           //判断软件是否注册
           RegistryKey retkey = Registry.CurrentUser.OpenSubKey("SOFTWARE", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI");
           foreach (string strRNum in retkey.GetSubKeyNames())
           {
               if (strRNum == getRNum())
               {
                   this.label3.Text = "此软件已注册!";
                   this.btnReg.Enabled = false;
                   return;
               }
           }
           this.label3.Text = "此软件尚未注册!";
           this.btnReg.Enabled = true;
           MessageBox.Show("您现在使用的是试用版,可以免费试用30次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);

           Int32 tLong;    //已使用次数
           try
           {
               tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
               MessageBox.Show("您已经使用了" + tLong + "次!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
           catch
           {
               MessageBox.Show("欢迎使用本软件!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
               Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0, RegistryValueKind.DWord);
           }
           //判断是否可以继续试用
           tLong = (Int32)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", 0);
           if (tLong < 10)
           {
               int tTimes = tLong + 1;
               Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\mySoftWare", "UseTimes", tTimes);
           }
           else
           {
               MessageBox.Show("试用次数已到!请注册!", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
           }
       }
       catch (Exception ex)
       {
           MessageBox.Show("请以管理员身份运行!");
           this.Close();
       }
       txtMachineNum.Text = getMNum();
   }

注册码效验程序


```csharp

```csharp
 private void btnReg_Click(object sender, EventArgs e)
 {
       try
       {
           if (txtRegNum.Text == getRNum())
           {
               MessageBox.Show("注册成功!重启软件后生效!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
               RegistryKey retkey = Registry.CurrentUser.OpenSubKey("Software", true).CreateSubKey("mySoftWare").CreateSubKey("Register.INI").CreateSubKey(getRNum());
               retkey.SetValue("UserName", "Rsoft");
               this.Close();
           }
           else
           {
               MessageBox.Show("注册码错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
           }
       }
       catch (Exception ex)
       {
           throw new Exception(ex.Message);
       }
   }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值