我想创建一个模型,该模型具有一个保存基于字符串的唯一标识符的属性。Rails字符串唯一ID
我只想要唯一的字符串是3个字符长,由字母(仅限小写字母)和数字组成。
我该如何实现类似上述的东西?我如何避免碰撞?我研究了MD5,这似乎与我想要完成的内容相符 - 但更短。如果这使得这种方法具有确定性,我也愿意在一段时间内种下它。
我很想关于这个主题的任何反馈或指针。谢谢!
编辑: 一个解决方案,一直在我的脑海中创建一个表满每一个置换,然后随机从表中需要选择和删除使用一次。这是一个坏方法吗?
我想创建一个模型,该模型具有一个保存基于字符串的唯一标识符的属性。Rails字符串唯一ID
我只想要唯一的字符串是3个字符长,由字母(仅限小写字母)和数字组成。
我该如何实现类似上述的东西?我如何避免碰撞?我研究了MD5,这似乎与我想要完成的内容相符 - 但更短。如果这使得这种方法具有确定性,我也愿意在一段时间内种下它。
我很想关于这个主题的任何反馈或指针。谢谢!
编辑: 一个解决方案,一直在我的脑海中创建一个表满每一个置换,然后随机从表中需要选择和删除使用一次。这是一个坏方法吗?
看看这个SO thread;它有很多好的建议。特别是Simone Carletti的最后回答,指向这个post。
在上面的帖子中有很多选项。我很喜欢,而且可能对您有用的一个是利用rufus-mnemo gem
所以我决定读一些问题&答案后推出的解决方案比任何人有什么建议有很大的不同。
我创建了一个表来存储代码。我写了一个红宝石脚本来填充这张表,每个字母组合都是基于我想要使用的字符。然后在我的模型中,如果代码尚未分配,我有一个before_save方法将代码分配给实例。
这种方法可以确保在before_save中分配代码时我永远不会碰撞。最慢的部分是桌子的一代,但因为我只需要处理这一点就可以做到这一点。
This gem called alphadecimal可能会帮助你。
3个字符似乎有点乐观。你为什么需要这么短,而且只有字母? –
这只适用于您希望数据库中永远不会超过46656条记录的情况。此外,你是否想要随机生成标识符,或者你可以简单地从'aaa','aab','aac'开始...... – meagar
嗯,我认为我从3个字符开始,并根据需要将其碰撞。用户需要在邮寄地址中使用这些字符,所以越短越好。身份不应该是可预测的,而应该是随机的。 – aren55555