我在考虑如何制作一个生成small function
YouTube
的{{1}},如ID
并且不会导致碰撞。字符集应该是A-Za-z0-9-_
,并且我可以说我希望它10 characters
长,等于64 ^ 10 / Quadrillion
- 1153 Quadrillion
种可能性。
成为small
是非常重要的,因为它是网站的主要功能之一,应该足够清晰,可以轻松修改。在紧急情况发生的几秒钟内。
从某种意义上说,它不一定是secure
我们并不介意是否很容易将其转换回ID
作为局外人。但它不应该是这样的模式:
aaaaaaaaaa
aaaaaaaaab
aaaaaaaaac
我知道你理论上可以制作一个charset
并随机循环,直到你有10
个随机字符,但这可能会发生碰撞(我发现这个机会很小,你可以执行一个查询看看之前是否已生成key
,但我希望将依赖关系保持在最低限度,而不是依赖于SQL
)。
我还可以设想在charset
中制作100 characters
0-99
,然后如果random
条件不是length of 10
,则前置和/或追加A
个字符满足。例如:
_
是集合中的第一个字符,id: 0 = A+9 random characters
是最后一个字符。 id: 1 = B+9 random characters
id: 99 = _+9 random characters
id: 990 = _A+8 random characters
id: 99999999999999999999 = __________
collisions
我认为这会阻止charset
,但我没有100
64
但ID
。
希望有人可以抛出一些想法。
如果99
为A
,则并不意味着下一个字符不能chance
collide
,尽管不太可能;它可能因此990
与static component
: - (
UPDATE2 :如果我们在ID
之后和random component
之前使用charset
,我认为它仍然不会发生冲突不属于id: 0 = A$+8 random characters
。
更新了Sketch(静态组件为$):
id: 1 = B$+8 random characters
id: 99 = _$+8 random characters
id: 990 = _A$+7 random characters
id: 999999999999999999 = _________$
答案 0 :(得分:0)
与您在此处的其他问题一样Encode/Decode ID Reversal issue您想要的只是将基数为10的ID转换为与10不同的基数...
你可以简单地对它进行base64编码并完成...
如果你想让它看起来像是随机的,那么在...之前转换数字,例如,简单地用静态的60位值xor ...