生成表唯一字符串

时间:2015-12-15 23:00:32

标签: php mysql

所以基本上这个

我希望在表格的每一行都有一个5个字符长的字符串/标记

每个令牌都由这些字符组成

abcdefghijklmnopqrstuvwxyz0123456789

创建令牌不是问题,使其独一无二是

我知道我可以创建一个令牌,检查它是否存在,然后循环直到它没有但这看起来效率非常低并且可能是很多查询

是否有更清洁,更快速的解决方案?

2 个答案:

答案 0 :(得分:0)

这可能是您正在寻找的:

https://gist.github.com/gordonbrander/2230317

var ID = function () {
  // Math.random should be unique because of its seeding algorithm.
  // Convert it to base 36 (numbers + letters), and grab the first 9 characters
  // after the decimal.
  return '_' + Math.random().toString(36).substr(2, 9);
};

如果您愿意使用js库,那么:

https://www.npmjs.com/package/shortid

http://hashids.org/

答案 1 :(得分:0)

您可以生成0到60466175之间的随机数,检查它是否存在,然后CONV([the number], 10, 36)

碰撞的可能性很大程度上取决于您拥有多少数据,如果它看起来像是一个问题,解决方案可能是提前将所有6000万+组合填充到表格中,{{1} }字段。随机选择一个used,并将其标记为当时使用。

编辑:另一位用户对原始问题的评论甚至更好,从"可用代币中删除"表格意味着速度可以随着时间的推移而改善。

Edit2:如果您想确保5位数字,则该数字必须为> = 1679616。