如何创建唯一的激活码?
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。
【讨论】:
以上是关于如何创建唯一的激活码?的主要内容,如果未能解决你的问题,请参考以下文章