【发布时间】:2020-01-31 11:46:29
【问题描述】:
我现在正在创建一个应用程序,该应用程序需要为用户提供一个唯一的 8 位代码(仅限数字),他们可以输入该代码以访问我网站的受限部分,将其视为基本身份验证,即输入密码,密码匹配用户,返回用户。我遇到的问题是创建一个唯一的 8 位代码。我知道 PHP 有 uniqid() 但它返回的字符串太长了。
我考虑过创建 time() 和用户 IP 地址的哈希,但 laravel 的 Hash::create 返回整数和字符。
谁能指出创建随机 8 位代码的方向?我也尝试过mt_rand,但显然这可能会创建匹配的数字,除非我在保存之前检查数据库中的代码,如果存在则重新生成?
【问题讨论】:
-
这个前提有些不对劲,8 位数字也不是很独特(即使您有成千上万的用户,冲突也可能半频繁地发生)。您为什么不在这里使用标准的授权/身份验证方法?
-
另外,从用户体验的角度来看,一个随机的 8 位字符串可能比用户为自己设置的几个随机单词或密码更难记住。我认为上面关于身份验证角色的两点是要走的路:)但是如果你继续使用 8 位数字,一定要检查 db 是否有重复的 uid
-
请试试这个hashids.org/php
-
@YaserDarzi 如何用这个创建 8 位数字哈希?
-
@kerbholz 看到这个 repo github.com/amamarul/integer-hashids