C# 如何生成一个随机的8位字符串,并验证它是否在可行的时间内已经生成?

C# 如何生成一个随机的8位字符串,并验证它是否在可行的时间内已经生成?,c#,sql,.net,sql-server,random,C#,Sql,.net,Sql Server,Random,我需要生成一个8位数的随机字符串,下次生成随机数时,请确保它尚未生成。如果我们只是认为我必须存储生成的每个确认号,并且每次尝试生成一个新的确认号时,请通过查看存储的值来验证它是否尚未生成 在我的例子中,数字存储在数据库中 但是,如果已经生成的数字很多,那么验证这一点可能需要相当长的时间。解决这个问题的最佳方法是什么?这应该像youtube视频Id一样工作。youtube视频Id生成器偶然生成相同的视频Id两次,这可能永远不会发生。因此,他们肯定在验证每次生成一个新的videoid时,它是否已经生

我需要生成一个8位数的随机字符串,下次生成随机数时,请确保它尚未生成。如果我们只是认为我必须存储生成的每个确认号,并且每次尝试生成一个新的确认号时,请通过查看存储的值来验证它是否尚未生成

在我的例子中,数字存储在数据库中

但是,如果已经生成的数字很多,那么验证这一点可能需要相当长的时间。解决这个问题的最佳方法是什么?这应该像youtube视频Id一样工作。youtube视频Id生成器偶然生成相同的视频Id两次,这可能永远不会发生。因此,他们肯定在验证每次生成一个新的videoid时,它是否已经生成并用于其他视频。可能有很多


我所说的“可行时间”是指从网站上获得的有用信息。如果对于网站用户,我询问某些信息并为他/她创建唯一标识符,那么我不希望网站运行缓慢,因为我正在验证随机生成的标识符在数据库中不存在。

如果您使用的是随机生成器,您需要检查以确保每个数字/字符串都是唯一的,您不能在循环中只选择并检查唯一性。你选择的数字越多,这总是需要更长的时间,没有理由你不能永远随机选择1

要真正解决唯一性检查耗时任意长的问题,唯一的方法是创建一个包含所有可能结果的无序列表,然后一次删除一个。您可以按顺序生成列表,然后使用来相对高效地洗牌列表


所有8位字符串的列表很长,但这是安全的方法,并且随着您的继续,列表会变小。

在本机上运行的程序中是否尚未生成?在这台机器上,在任何时候,通过程序的任何实例?世界上任何地方的任何程序实例?一个可行的时间量是一毫秒、一年还是一个世纪?这个问题太模糊了,无法回答。出于安全原因,您的号码必须是随机的吗?它真的需要是随机的吗?除了长度之外,数字还必须具有哪些属性?例如,您是否可以使用乘法逆技术通过映射1、2、3……来生成唯一的数字。。。“随机”数字?另外,它是否需要是字符串,或者可以是0到9999999之间的整数?您将字符串称为数字。使用
int
将占用更少的内存。@Eric我详细阐述了这个问题以澄清我的意图。如果还不清楚,请告诉我,从长远来看,你认为你将消耗掉的1亿种可能性中有多少?唯一的方法是什么?你认为这就是保证guid唯一性的方式吗?“没有理由你不能永远随机选择1”有:概率。伙计,你们这些人对措辞真的很挑剔。我所说的“没有理由”是指这个过程不是确定性的,并且可以持续任意长的时间。@Ryan:“一个好的随机数生成器也会产生人眼看不出是随机的序列,并且也会通过我们可能会暴露给它的任何统计测试”——来自@LucaCremonesi:不确定这是什么意思。