【问题标题】:5-digit unique/random/unpredictable alpanumberic id for eCommerce with min.10k id's,is this ok?电子商务的 5 位唯一/随机/不可预测的字母数字 id,至少 10k id,可以吗?
【发布时间】:2015-02-28 09:21:50
【问题描述】:

任何人都可以指定-

  1. 随机性?
  2. 独一无二?
  3. 使用安全可靠吗?
  4. 用户不应该识别下一代号码或以前的号码?从此

substr(str_shuffle(str_repeat("0123456789abcdefghijklmnopqrstuvwxyz", 5)), 0, 5);

在 - Generate random 5 characters string 中找到这个

这样做的目的是在电子商务网站中将其显示为用户的订单 ID,我不应该得到重复,预测下一个或对用户不安全。

假设每天的订单量为 10,000。这意味着我需要至少 10,000 个唯一的订单 ID。这 5 位数字是否足够独特以继续进行?

至少我可以使用 YYMMDD-XXXXX,但如果可能的话,我更喜欢不带日期!!

【问题讨论】:

  • 你不能保证它是唯一的,如果它真的只是随机的就不能保证......为了保证唯一性,你需要检查以前生成的值列表

标签: php random e-commerce


【解决方案1】:

两者都可以。您可以有一个随机字符串,用作将订单、购物车、客户等表 db 关联在一起的唯一 ID。 并且您可以为提供给客户的订单号使用标准递增 ID。考虑这一点的原因——随着时间的推移,如果订单号是连续的,管理员将更容易完成订单。

最好的情况是,如果在交易清除或订单真正完成之前没有生成最终的“订单”记录 ID,那么您的订单号将是连续的。

如果您正在生成一个随机字符串——那么您必须至少检查一次该字符串以确保没有重复。

我使用的是随机字符串,但后来我改用日期时间 + 微秒 + 随机字符串——不用担心重复,唯一 id 有一些有用的信息。

【讨论】:

    【解决方案2】:

    openssl 扩展中提供了另一种生成伪随机字节的方法,official documentation here

    但如前所述,您将始终必须检查生成的随机 id 是否已被使用。 (并重新生成另一个随机字符串,直到你有一个唯一的)

    相反,我强烈建议您首先认真思考为什么要使用随机订单 ID。您想通过不使用自动增量来解决什么问题?

    【讨论】:

      【解决方案3】:

      如果您真的希望输出“不可预测”和“唯一”,您不仅需要根据之前生成的值检查值,还可以考虑使用 CSPRNG,具体取决于 ID 的重要性。如果只用于命名和排序,普通的RNG应该就够了。

      请注意 PHP 中 rand()mt_rand() 之间的区别,后者使用 Mersenne twister,这是一种 PRNG,其产生的随机性足以满足您的需求。

      无论如何,5 位数字足以满足您的需求,因为只有数字 (0-9) 才有 10 ^ 5 ( = 100k ) 个可能性。

      【讨论】:

      • 是的,我已经通过了 uniqid()、sha1()、rand()、mt_rand()、md5() 但同样,根据其他帖子,人们也说过有机会重复的,我只需要知道天气我有更好的输出 str_shuffle() 和 str_repeat(),因为在前 5000 个数字中,我几乎找不到重复的数字,但希望专家建议继续进行,无论如何感谢建议。
      【解决方案4】:

      如果您想要一个唯一且难以猜测的伪随机数,则应考虑使用 GUID/UUID。 GUID 生成库适用于大多数语言。

      http://en.wikipedia.org/wiki/Globally_unique_identifier

      【讨论】:

      • GUID/UUID 不适合我,无论如何我都会接受建议,thnx
      猜你喜欢
      • 2011-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 2011-02-20
      • 2022-01-18
      相关资源
      最近更新 更多