如何创建唯一的激活码?

Posted

技术标签:

【中文标题】如何创建唯一的激活码?【英文标题】:How can I create a unique activation code? 【发布时间】:2014-05-14 11:44:39 【问题描述】:

我正在尝试创建数据库中尚不存在的唯一激活码。我的问题是如何测试这个?

我尝试使用断点,然后将 db 表更改为新结果,但没有成功

private string CreateActivationCode()

    string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    Random random = new Random();
    string result = new string(
        Enumerable.Repeat(chars, 4)
                  .Select(s => s[random.Next(s.Length)])
                  .ToArray());

    IEnumerable<string> existingActivationKeys = _mobileDeviceService.GetAll().Select(x => x.UsageKey).ToList();

    if (existingActivationKeys.Contains(result))
    
        //USE GO TO????
        CreateUsageKey();
    

    return result;

【问题讨论】:

这只给你 26^4 个代码,够了吗?可能有比您现在的方式更好的方法来执行此操作...您是否考虑过使用 GUID? 您是在问如何最好地生成唯一密钥,还是在问如何测试您发布的方法? 【参考方案1】:

正如 Dean Ward 在他的评论中所建议的,您可以改用 GUID 作为您的激活密钥。

如何做到这一点的一个例子如下:

private string CreateActivationKey()

    var activationKey = Guid.NewGuid().ToString();

    var activationKeyAlreadyExists = 
     mobileDeviceService.GetActivationKeys().Any(key => key == activationKey);

    if (activationKeyAlreadyExists)
    
        activationKey = CreateActivationKey();
    

    return activationKey;

我已使用“GetActivationKeys”使我的解决方案与您的“GetAll”方法保持一致;但是,我可能会实现一种方法来执行数据库查询以检查是否存在密钥(将所有激活密钥带回您的服务并不是最高效的解决方案)。

生成重复 GUID 的可能性非常低。一篇关于 GUID 的好文章是 here。

【讨论】:

以上是关于如何创建唯一的激活码?的主要内容,如果未能解决你的问题,请参考以下文章

发送随机密码盐作为激活码?

为我的 android 应用程序创建激活码

office2016如何激活码激活

如何安装Visio2016及激活码

求 idea JRebel 激活码

如何安装Visio2016及激活码