生成数字序列.序列不应该有任何相似


Generate sequence on digits. Sequences should not be any similar

我想生成一个9位序列的长列表。

我们叫它们ID。

所以每个ID都是唯一的,主要目的是让它们都不同。2个id序列相差1或2位是不可接受的。

你有任何想法如何实现它,而不比较每个新生成的ID与每个以前生成的?

可能已经有一些算法或简单的MYSQL函数来比较这些字符串有多接近?

你可以为你的ID尝试以下公式-你只需要检查ID值不已经存在于表中(salt0100之间的常数,一旦你选择一个值就不会改变-我建议使用素数,绝对不是0):

ID = random integer * 101 + salt;

生成的ID值如下所示(对于salt = 73):

469956305
017775467
001195913
913620520
156482807
577463533
470183959
049290800
078643925
141526626

如果您取任意两个ID值并比较它们,您将注意到没有两个数字在序列上仅相差一个或两个数字。我写了一个脚本来比较03000000之间所有可能的ID值,并且没有这种形式的两个ID值在顺序上有1或2位数的差异。如果你想自己测试一下,下面是我用的脚本(c#): http://ideone.com/lFHnlX -我减少了上限,因为超时在IDEone上

您想避免唯一性检查您不希望id相似?然后你真的在寻找uuid/GUIDs。

MySQL内置的uuid()函数会帮你实现。

正如Robert Harvey指出的那样,uuid是字母数字(而不是数字),并且长度大于9个字符,但是您将不得不牺牲的一些 -您无法同时满足所有的约束。