对于我的逻辑,我需要通过某种格式生成uniq邀请代码 - 三位数和两位字母。在我使用Config.Volumes
之前,但对于用户而言,这是非常复杂的邀请代码,请记住。以某种格式自动生成邀请代码的正确方法,例如 - Ramsey uuid
?
我的实体用户有uniq字段A123B
。当我创建新实体时,我希望按格式生成自动uniq随机代码 - inviteCode
three digits and two letters
我找到了类似的东西
/**
* @ORM\Table(name="users")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @AssertBridge\UniqueEntity(
* groups={"registration"},
* fields="inviteCode",
* errorPath="not valid",
* message="This inviteCode is already in use."
* )
*/
class User extends AbstractUser implements UserInterface
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=500, unique=true)
* @Annotation\SerializedName("_invite_code")
*/
private $inviteCode;
首先从表中获取最大ID,然后使用id调用函数 private function calculateReference($number)
{
$multipliers = array(7,3,1);
$length = strlen($number);
$numberArr = str_split($number);
$sum = 0;
for ($i = $length - 1; $i >= 0; --$i)
{
$sum += $numberArr[$i] * $multipliers[($length - 1 - $i) % 3];
}
return $number.(10 - $sum % 10) % 10;
}
,但我需要调整长度,例如只有6个符号
现在有什么好方法可以按格式calculateReference
生成一些哈希值?
答案 0 :(得分:0)
在我的项目中,我只是在控制器中执行此操作,如下所示:
$genActivationHash = bin2hex(random_bytes(64));
$activationLink = $this->container->getParameter('base_url') .
"/activate/" . $genActivationHash;
您可以通过简单地更改字节数
来编辑哈希的长度random_bytes(n)的
编辑;我现在看到,它不能满足你对两个字母和三个数字的要求。