String 如何生成唯一字符串?

String 如何生成唯一字符串?,string,unique,String,Unique,我有一个设备,我希望为每个设备生成以下格式的字符串:XXXXXXXX。每个X要么是B,G,要么是R。例如grbrrbb。这给了我大约7000把钥匙,这足够了,因为我怀疑我会有更多的设备 我想我可以提前生成它们,并将它们转储到文件或其他文件中,然后从中获取下一个可用密钥,但我想知道是否有更好的方法来实现这一点 我知道如果我不需要保证独特性,有更好的方法可以做到这一点,但我确实需要这样做,所以我不确定最好的方法是什么 将其视为一个数字的三元表示,其中R=0,B=1,G=2。所以当你写第n个ID时,如

我有一个设备,我希望为每个设备生成以下格式的字符串:
XXXXXXXX
。每个
X
要么是
B
G
,要么是
R
。例如
grbrrbb
。这给了我大约7000把钥匙,这足够了,因为我怀疑我会有更多的设备

我想我可以提前生成它们,并将它们转储到文件或其他文件中,然后从中获取下一个可用密钥,但我想知道是否有更好的方法来实现这一点


我知道如果我不需要保证独特性,有更好的方法可以做到这一点,但我确实需要这样做,所以我不确定最好的方法是什么

将其视为一个数字的三元表示,其中R=0,B=1,G=2。所以当你写第n个ID时,如果n%3==0,第一个数字是R,如果n%3==1,第一个数字是B,否则是G。第二个数字是相同的,只是你看到的是(n/3)%3;第三个数字看(n/3^2)%3;等等。

如果您的设备有任何唯一的顺序ID可用,我将为该“唯一字符串”检索实现确定性算法

我是说

GetDeviceRgbString(deviceid) { // deterministic algorithm returning appropriate value using device id to choose it }

否则考虑将它存储在某个地方(取决于你的环境,你提供的数据很少,但可能是文件、数据库、……),并将它们标记为使用,最好保留有关指定设备的数据,你可能需要它一次。

< P>我假定你希望它们对某些类型的网络(Internet)活动识别它们。在这种情况下,我会有一个web服务,它可以通过分发ID来确保每个设备都是唯一的。每个设备上的软件都会查看它是否有ID(存储在本地),如果没有,则从web服务请求ID。

那么您将能够跟踪您已经分配的ID?它们需要看起来是随机的吗?或者它们是连续的?这对你有用吗@MichaelDillon-这不起作用,因为它不能保证我所需要的独特性。如果可能的世代数很大,我可以忽略这一点,但成为同一个密钥的概率太高了。特别是当6000台设备推出时,它们实际上很有可能不是唯一的。@weston-我想它们可以是顺序的,但如果是随机的,那就更好了——只需生成所有字符串,然后洗牌它们。那就抓起它们吧。看起来很简单。我知道那个部分,我说的是保证唯一性的唯一8位id的实际生成。我不确定我是否理解。如我所述,如果你有一个1:1的#s和ID之间的映射,那么你的ID方案似乎可以简单到“用一个全局计数器n表示我创建了多少个ID,当我被要求一个新的ID时,用三元表示++n。”为什么这对你不起作用?用Paul的答案生成一个所有ID的列表,然后随机化列表的顺序。然后,要获得新id,请从列表中删除下一个id。这将是随机的,但却是独一无二的。