在我的 Asp.Net MVC 5 项目中,我首先使用实体框架代码来处理 MS SQL 数据库。假设这是表:
public class Ticket
{
[Key]
public int Id { get; set; }
[Required]
public string ReferenceCode { get; set; }
//Rest of the table
}
在此表中,每当我添加新代码时,我想要ReferenceCode
列成为unique以及具有特定长度的随机字母数字(仅包含字母和数字)字符串。例如,这将允许用户引用特定的票证。
以下是一些长度为 10 个字符的示例:TK254X26W1
, W2S564Z111
, 1STT135PA5
...
现在,我可以生成具有给定长度的随机字符串。但是,我不确定如何保证他们独特性。我这样做:
db.Tickets.Add(new Ticket()
{
ReferenceCode = GenerateRandomCode(10),
//...
});
准确地说,我想要的是GenerateRandomCode
函数或者其他方法来确保生成的字符串没有被用于其他记录。
我可以用一个for
循环来检查每个生成的代码,但我认为这不是一个好主意。尤其是一段时间后,表中就会有数千条记录。
您可以使用Guid https://msdn.microsoft.com/en-us/library/system.guid(v=vs.110).aspx为了生成唯一的(但在安全方面不是随机的)密钥。
拉自这个问题 https://stackoverflow.com/questions/730268/unique-random-string-generation:
Guid g = Guid.NewGuid();
string GuidString = Convert.ToBase64String(g.ToByteArray());
GuidString = GuidString.Replace("=","");
GuidString = GuidString.Replace("+","");
GuidString = GuidString.ToUpper();
将生成一个适合您的唯一密钥ReferenceCode
属性需要但更长(22 个字符)。折叠它并使用 X 字符将不再保证其唯一性。
OZVV5TPP4U6XJTHACORZEQ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)