【问题标题】: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?
  • 您是在问如何最好地生成唯一密钥,还是在问如何测试您发布的方法?

标签: c# asp.net-mvc asp.net-mvc-3 key activation


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2015-01-06
    • 1970-01-01
    • 2014-03-15
    • 2020-05-20
    • 1970-01-01
    • 2010-11-25
    • 2021-09-24
    • 2019-04-22
    相关资源
    最近更新 更多