如何创建唯一的激活码?

Joh*_*ohn 5 c# asp.net-mvc activation key asp.net-mvc-3

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

我尝试使用断点然后将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;
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ith 6

正如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;
}
Run Code Online (Sandbox Code Playgroud)

我使用"GetActivationKeys"让我的解决方案与你的"GetAll"方法保持一致; 但是,我可能会实现一种方法来执行数据库查询以检查密钥的存在(将所有激活密钥恢复到您的服务并不是最高性能的解决方案).

生成重复GUID的可能性非常低.关于GUID的一篇很好的文章就在这里.