查询字符串唯一的字符串生成器



我问:显然如何生成如何生成随机查询字符串/url。

可以在许多地方找到:

http://www.youtube.com/watch?v=IMl7pvaWzh8
                                   ^
                                   |
                                   +---------------- 
http://jsfiddle.net/xeolabs/LSTKM/light/
                              ^
                              |
                              +---------------- 
http://jsbin.com/asapay/1/edit
                   ^
                   |
                   +---------------- 

我被告知(似乎逻辑),当服务器选择新的URL时,它不会检查它是否是免费的(以前没有选择)

另外,我被告知它可能是一个公式的结果,例如: f(n+1) = f(n)+1(所以它根本不是随机的。

因此,新的URL参数是由于最后一个生成的URL参数而生成的。

我的问题:

我在哪里可以找到这样的发电机功能?

当然,我可以建立自己的一个这样的17 = 16 1,但是我正在寻找准备就绪喜欢:

f(n+1) = f(n)+1,有大写,较低的情况,数字。和
当然最小碰撞和预测。

你知道,专业人士...

我只是很好奇Google/YouTube/jsbin/jsfiddle每天都有数百万个请求来完成。

大声思考,但是您可以预先计算出巨大的独特哈希列表,然后将它们分配给任何新输入。预先计算将确保您可以继续检查碰撞,因为这不是实时的要求。您可以考虑在此问题中生成随机哈希。

这不能完全回答您的特定问题,但是如果您需要返回独特且不可预测的字符串的函数,则有一个:

Guid.NewGuid().ToString()

我经常在各种情况下使用它来形成唯一的Querysring。

System.IO具有随机的文件名发生器,也许您可以劫持。

string randomString = System.IO.Path.GetFileNameWithoutExtension(System.IO.Path.GetRandomFileName());

返回如" jdvpmpre"之类的东西

您可以一起加入一对夫妇以使其更加独特,但这将是一个简单的解决方案。

一个解决方案(我已经使用过)可能就是这样:

需求:一个增加顺序数字的唯一来源(例如Oracle中的序列或SQL Server中的自动插入索引) - 您可以可靠地处理以生成这种增量源的任何东西。

工作流以生成每个新URL(或您需要的任何内容):1-获取序列的下一个值。2-将其转换为基本的36个数字(您可以在C#中的实现Google上进行Google搜索)。3-使用URL中生成的基本36号(或您在做什么,例如修改数据库等)。

基本36号的注意:我们在日常操作中使用十进制系统,其中包含10位数字。我们在计算机中使用HEXA小数数,该计算机是由16位数字(0-9加a,b,c,d,e和f)产生的。现在,也有一个基本36系统,该系统是通过使用36位数字产生的。0-9和A-Z以及所有数字都是字母数字。因此可以在URL中轻松使用。Wikipedia页面的一个示例:2,821,109,907,456小数点将为CRE66I9在基地36中。

继续我的评论,
假设您有几个位置正在接受输入并产生独特的令牌,我说您可以分区范围。例如,说您在以色列有一个网站,一个在美国有一个网站,并且您希望两者都生成独特的令牌(您不希望在这些网站上生成的令牌之间有任何重叠),您可以使用独特的数据库来存储当前的当前令牌值。

(1)这是场景。DB以值1的令牌开头。
(2)以色列网站要求数据库获得一些新的代币,数据库的范围为1-1000(不是令牌,而是范围)。这样,以色列网站不必为每个新请求返回到DB,直到用来用尽所有1000个令牌。
(3)美国站点进入DB并获得令牌1001-2000范围。
(4)在我们的示例中,您有2个消费者和1名生产者(DB)。假设是您想尽可能少地使用DB,以免阻止其他消费者。因此,如果每个生产商需要1秒钟才能到达DB,那么DB应该给每个消费者多少ID。答案是消费者使用/1秒 *消费者数量的ID数量。这样,消费者就不会陷入僵局,彼此等待DB变得免费。

那么这些生产商如何利用范围?他们可以通过增加计数器来为从DB收到的范围生成基本72令牌。为什么要基础72?因为这给出了大量的象征。要提出72,我使用了0-9键上的A-Z,A-Z,0-9,特殊字符:25 25 10 10。您可以超过72。

在:
上找到会话令牌的实现https://github.com/hoytech/session-token

还有这个问题可能有帮助:
如何生成一个随机的alpha数字字符串?

最新更新