我想创建一个模型,该模型的属性包含基于字符串的唯一标识符。
我只希望唯一的字符串长度为 3 个字符,并由字母(仅小写)和数字组成。
我如何实现类似上面的东西?如何避免碰撞?我已经研究过 MD5,这似乎符合我想要完成的目标 - 但更短。如果这使方法具有确定性,我也愿意花时间播种。
我会喜欢关于这个主题的任何反馈或指示。谢谢!
编辑: 我想到的一个解决方案是创建一个充满每个排列的表,然后根据需要从表中随机选择,并在使用后删除。这是一个不好的方法吗?
我想创建一个模型,该模型的属性包含基于字符串的唯一标识符。
我只希望唯一的字符串长度为 3 个字符,并由字母(仅小写)和数字组成。
我如何实现类似上面的东西?如何避免碰撞?我已经研究过 MD5,这似乎符合我想要完成的目标 - 但更短。如果这使方法具有确定性,我也愿意花时间播种。
我会喜欢关于这个主题的任何反馈或指示。谢谢!
编辑: 我想到的一个解决方案是创建一个充满每个排列的表,然后根据需要从表中随机选择,并在使用后删除。这是一个不好的方法吗?
看看这个SO 线程;它有很多好的建议。尤其是Simone Carletti的最后一个答案,它指向了这篇文章。
上面的帖子有很多选择。我喜欢并且可能对您有用的一个是使用rufus-mnemo gem
这个叫做 alphadecimal 的 gem可能可以帮助你。
因此,在阅读了一些问题和答案后,我决定采用的解决方案与任何人建议的完全不同。
我创建了一个表来存储代码。我编写了一个 ruby 脚本,根据我想使用的字符,用每 3 个字母组合填充这个表。然后在我的模型上,如果尚未分配代码,我有一个 before_save 方法为实例分配一个代码。
这种方法确保我在 before_save 中分配代码时永远不会发生冲突。最慢的部分是表的生成,但因为我只需要在我可以处理这个问题时执行此操作。