2017-11-21 3 views
0

私のロジックとしては、uniq inviteコードをいくつかのフォーマット(3桁と2文字)で生成する必要があります。 Ramsey uuidを使用する前に、これは非常に複雑な招待コードで、覚えておいてください。自動的に何らかの形式で招待コードを生成する正しい方法、例 - A123Bフォーマットによるエンティティのsymfony固有のフィールド

私はユニークフィールドのエンティティユーザinviteCodeを持っています。私は新しいエンティティを作成するときに、私はフォーマットにより自動uniqのランダムコードを生成したい - 私はそのような何かを発見した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; 

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; 
} 

、関数IDを持つcalculateReferenceをテーブルから最大のidを呼び出します最初に、しかし、私は規制の長さ、例のみ6記号

フォーマットでいくつかのハッシュを生成するための良い方法は、three digits and two letters?私のプロジェクトで

答えて

0

、私は単純に、このように、コントローラで次の操作を行います。

$genActivationHash = bin2hex(random_bytes(64)); 
$activationLink = $this->container->getParameter('base_url') . 
"/activate/" . $genActivationHash; 

あなたは単にバイト数

random_bytesを(変更することで、ハッシュの長さを編集することができますn)

編集; 2文字と3桁の要件を満たしていないことがわかりました。

+0

これは本当ですが、満足していない、2文字と3桁のフォーマットが必要です –

関連する問題