场景:生成一批防伪验证码插入到数据表中 随机数规则:只能是小写字母+数字的 16 位字符串,不能连续。 已有一验证码 validationCode 表,验证码 code 字段值要求唯一。 目前代码: 用到了递归,有缺陷,目前表中已经 100w+数据,如果一次性生成 5w,哪怕有 1 条是重复的就要重新生成,虽然几率很低。
求优化~ 谢谢
private function generateUniqueValidationCodes(int $number)
{
$codeArr = [];
// 先生成指定数量的验证码
for ($i = 0; $i < $number; $i++) {
$codeArr[$i] = generate_validation_Code();
}
// 去表中查是否有存在的,如果有则重新生成,没有直接返回
$result = ValidationCodes::query()->whereIn('validation_code', $codeArr)->get();
if ($result->isNotEmpty()) {
// 递归
$this->generateUniqueValidationCodes($number);
} else {
return $codeArr;
}
}
还有一个思路,我新建一个已经保存了大批量唯一验证码的数据表,插入新验证码时直接这张表里提取,并用状态记录。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.