【转载】如何为软件添加注册码

【转载 老骆驼空间站】http://blog.csdn.net/gisfarmer/article/details/3860619

起始源码:转自:http://www.cnblogs.com/ziyiFly/archive/2008/09/22/1296096.html

为您的软件制作一款注册机。需要强调的是客户机器的硬件信息获取方式是有很多种选择的. 这里我们选择最放心的两个硬件: CUP的序列号和硬盘的卷标号. 好了, 下面您就可以一步一步制作一款软件注册机了.

步骤一: 获得CUP序列号和硬盘序列号的实现代码如下: 

[c-sharp]  view plain copy
  1. public string getCpu()  
  2. {  
  3.     string strCpu = null;  
  4.     ManagementClass myCpu = new ManagementClass("win32_Processor");  
  5.     ManagementObjectCollection myCpuConnection = myCpu.GetInstances();  
  6.     foreach (ManagementObject myObject in myCpuConnection)  
  7.     {  
  8.         strCpu = myObject.Properties["Processorid"].Value.ToString();  
  9.         break;  
  10.     } return strCpu;  
  11. }  

[c-sharp]  view plain copy
  1. // 取得设备硬盘的卷标号        
  2.  public string GetDiskVolumeSerialNumber()  
  3.  {  
  4.      ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");  
  5.      ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=/"d:/"");  
  6.      disk.Get();  
  7.      return disk.GetPropertyValue("VolumeSerialNumber").ToString();  
  8.   
  9.  }  

步骤二: 收集硬件信息生成机器码, 代码如下:

[c-sharp]  view plain copy
  1. //生成机器码         
  2. private void button1_Click(object sender, EventArgs e)  
  3. {  
  4.     label2.Text = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号   
  5.     string[] strid = new string[24];  
  6.                  
  7.     for (int i = 0; i < 24; i++)//把字符赋给数组   
  8.     {  
  9.         strid[i] = label2.Text.Substring(i, 1);  
  10.     } label2.Text = "";  
  11.     Random rdid = new Random();  
  12.     for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三   
  13.     {  
  14.         label2.Text += strid[rdid.Next(0, 24)];  
  15.     }  
  16. }  

步骤三: 使用机器码生成软件注册码, 代码如下:

        public int[] intCode = new int[127];//用于存密钥 
        public void setIntCode()//给数组赋值个小于10的随机数    
        {
            Random ra = new Random();
            for (int i = 1; i < intCode.Length; i++)
            {
                intCode[i] = ra.Next(0, 9);
            }
        } 
    
        public int[] intNumber = new int[25];//用于存机器码的Ascii值  
        public char[] Charcode = new char[25];//存储机器码字  
        //生成注册码      
        private void button2_Click(object sender, EventArgs e)
        {
            if (label2.Text != "")
            {                //把机器码存入数组中   
                setIntCode();//初始化127位数组      
                for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中 
                {
                    Charcode[i] = Convert.ToChar(label2.Text.Substring(i - 1, 1));
                }//        
                for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。
                {
                    intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]);
                }
                string strAsciiName = null;//用于存储机器码        
                for (int j = 1; j < intNumber.Length; j++)
                {
                    //MessageBox.Show((Convert.ToChar(intNumber[j])).ToString()); 
                    if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间 
                    {
                        strAsciiName += Convert.ToChar(intNumber[j]).ToString();
                    }
                    else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间 
                    {
                        strAsciiName += Convert.ToChar(intNumber[j]).ToString();
                    }
                    else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间 
                    {
                        strAsciiName += Convert.ToChar(intNumber[j]).ToString();
                    }
                    else//判断字符ASCII值不在以上范围内   
                    {
                        if (intNumber[j] > 122)//判断字符ASCII值是否大于z  
                        {
                            strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();
                        }
                        else
                        {
                            strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();
                        }
                    }
                    label3.Text = strAsciiName;//得到注册码    
                }
            }
            else
            {
                MessageBox.Show("请选生成机器码", "注册提示");
            }
        }

步骤四: 用户输入注册码注册软件, 演示代码如下:

        private void btnRegist_Click(object sender, EventArgs e)
        {
            if (label3.Text != "")
            {
                if (textBox1.Text.TrimEnd().Equals(label3.Text.TrimEnd()))
                {
                    Microsoft.Win32.RegistryKey retkey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("software", true).CreateSubKey("ZHY").CreateSubKey("ZHY.INI").CreateSubKey(textBox1.Text.TrimEnd());
                    retkey.SetValue("UserName", "MySoft");
                    MessageBox.Show("注册成功");
                }
                else { MessageBox.Show("注册码输入错误"); }
            }
            else
            {
                MessageBox.Show("请生成注册码", "注册提示");
            }
        }

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中实现软件注册码功能,可以参考如下步骤: 1. 定义软件注册码生成算法:可以采用一些加密算法,如MD5、SHA等,在用户购买软件后,将硬件信息、购买信息等关键数据进行加密生成唯一的注册码。 2. 在软件添加注册码输入界面:设计一个用户输入注册码的界面,在界面中添加一个输入框用于用户输入注册码。 3. 验证注册码:在用户输入注册码后,点击验证按钮,软件需要验证注册码的有效性。可以通过在软件中内嵌一个验证函数,将用户输入的注册码与之前生成的注册码进行对比,如果一致,则认证成功,可以继续使用软件;否则,认证失败,提醒用户重新输入注册码。 4. 保存注册码信息:在软件内部定义一个保存注册码信息的存储方式,可以选择将注册码保存在配置文件中,也可以保存在数据库中。当用户输入有效的注册码后,需要将注册码信息保存在本地,下次打开软件时无需再次输入。 5. 锁定软件功能:在软件中内部添加一个判断函数,在用户没有输入有效的注册码或者未通过验证时,锁定某些功能模块,使用户无法正常使用。当用户成功通过验证后,解锁相应功能模块。 6. 提供注册码管理界面:为了方便用户使用和管理注册码,可以设计一个注册码管理界面,用户可以在其中查看已经输入的注册码,进行重新输入、更新注册码等操作。 通过以上步骤,在Qt中实现软件注册码功能,可以保护软件的合法使用,防止盗版和非授权用户的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值