首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >固定位数的唯一码

问固定位数的唯一码
EN

Stack Overflow用户
提问于 2013-12-19 07:51:02
回答 2查看 1.4K关注 0票数 0

在我的mysql数据库中,我存储可以在我的PHP web应用程序中显示的产品。每个报价都有其独特的自动增量数据库ID,我不想向用户显示该ID。但是,我需要一些公共的唯一标识符。

为什么我不想显示真实ID

  • 数字的数量可能会变化,过了一段时间,这个数字可能会太长。
  • 如果某人减去两个选定的报价的If,他就会收到在这两个报价之间公布的报价数量。

我想从公共ID得到什么

  • 是独一无二的
  • 有固定的数字(最优5或6)

我所知道的

  • 有效要约的最长期限为6个月(今后可能更长,但不超过一年)。

我在想的:

  • “实”ID的一个奇异变换
  • 时间戳的转换
  • 生成未使用的数字列表,如:生成6位唯一数字中所建议的那样

问题:

  1. 最后一个选择对你来说是最好的吗?或者你能建议其他常用的方法/技术吗?
  2. 对于所有6位数字,保留90万行表可以吗?
  3. 如果(理论上)我的主动报价超过了90万(我知道如果发生这种情况,第2点就无关紧要了),我该如何处理呢?
  4. 有更多的非活动的提供可能具有相同的ID是正确的吗?例如,可能会发生一些用户想要参考他以前的报价。
  5. 为了扩大可能组合的数量,使用字母和数字不是更好吗?
EN

回答 2

Stack Overflow用户

发布于 2013-12-19 08:39:49

从可用性的角度来看,使用字母和数字可能会更好,而且你会得到更多的组合。

在大多数情况下,存储大约一百万这样的内存不会造成太大的破坏。

是预先生成这些代码还是按需生成这些代码将是一个使用问题--1000人是否可能同时生成代码?如果是的话,先建好它们。存储空间是一个因素吗?如果是这样的话,可以考虑在飞行中生成它们。

您可能应该避免两个报价代码相同的潜在可能性,所以要么根据需要将它们与实际报价挂钩,要么确保生成器功能为每次使用生成唯一的报价代码。

票数 1
EN

Stack Overflow用户

发布于 2013-12-19 08:53:01

好吧,你能做的最好的事情是:1)用完整的参数(yyyy:mm:ss)从日期生成一个变量,并将它与用户电子邮件连接起来。用md5对其进行编码。

(2)或者使用名为NEWID()的MSSQL服务器中存在的guid生成器,这与c# GUID相同

您可以将它从0转到所需的字符数。

我不会重新建议将未使用的数字列表作为性能的原因。

将它作为整数也不是很好,因为它更容易生成一个从0到9个字符的数字来黑入你的数据库(注射和类似的东西)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20676134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档