【问题标题】:How can I improve this random promo code generator script? [duplicate]如何改进这个随机促销代码生成器脚本? [复制]
【发布时间】:2017-07-05 18:12:22
【问题描述】:

我有这个生成随机促销代码的脚本。

    }
    $length = 10;
    $characters = '123456789ABCDEFGHJKMNPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $event = $request->event;
    $prefix = $request->prefix;
    $quantity = $request->quantity;
    $randomString = '';
    for ($x = 0; $x <= $quantity; $x++) {
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }

        $pin = "$prefix"."$randomString";
        $exists = Pin::where('pin', $pin)->first();
        if(!$exists){
            $new['pin'] = $pin;
            $new['event'] = $event;
            $new['user'] = '';
            Pin::create($new);
        }

        $randomString = '';
    }

它可以工作,但需要优化,因为当 $quantity 超过几千美元时,它可能需要很长时间才能执行。

我怀疑时间占用是正在寻找引脚是否存在的位。我确信必须有一种更有效的方法来确保随机字符串是唯一的。

想法?谢谢!

****** 正如所指出的,这里已经解决了随机哈希生成问题 ******

也许是这个问题的第 2 部分...

客户已请求为随机代码选择一组字符 - '123456789ABCDEFGHJKMNPQRSTUVWXYZ'。有没有办法限制 md5 哈希输出的字符?

【问题讨论】:

  • 感谢约翰指出这一点。我确实读过那个问题。我不认为这是一个骗局,因为我试图像示例一样批量生成与创建临时广告。但是,现在我正在重新考虑整个方法。

标签: php


【解决方案1】:

更简单的方法:

$randomString = sha1(rand(0, 2000));

【讨论】:

  • 这如何确保生成的内容对于当前集合是唯一的?
  • 您可以检查它是否认为是带有确认代码的数据库,并在确认后将其删除。如果它存在,则重新生成一个。
  • 公平。要清楚。我的脚本需要批量生成代码。一个都没有。所以我需要一次生成并插入15k。虽然,我想现在我考虑一下,我可以重新考虑整个过程并根据需要而不是提前生成它们......
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多