0

英数字の文字列を生成してデータベースの値と比較する必要がありますが、値がデータベースに存在する場合は、別の数値の文字列を生成し、データベースの値と比較する必要があります。

<?php
$character_array = array_merge(range('a', 'z'), range(0, 9));
$Emp_Id = "";
for($i = 0; $i < 6; $i++) {
    $Emp_Id .= $character_array[rand(0, (count($character_array) - 1))];} ?>

これは英数字コードを作成することで正常に機能しますが、前述のように、データベース値と比較する必要があります。

$chkEmp_Id=mysql_fetch_array(mysql_query("SELECT Emp_Id FROM talent_users WHERE   Emp_Id='{$Emp_Id}' "));

データベース値と比較した後、値が存在する場合は、異なる「Emp_Id」を生成する必要があります。生成された従業員IDは、データベース値と比較する必要があります。

4

1 に答える 1

0
$pool = array_merge (range ('a', 'z'), range(0, 9));

do
{
    $hash = "";
    for ($i = 0; $i < $lengthOfHash; ++$i)
    {
        $hash .= $pool[array_rand ($pool)];
    }
while ( mysql_result (mysql_query ('SELECT COUNT(1) FROM talent_users WHERE Emp_Id = ' . $hash), 0) > 0);

しかし、これはテーブルのサイズが大きくなると大きなボトルネックになります。ハッシュは英数字なので、なぜハッシュをuserIdで始められないのでしょうか。

//hash = <a number> + <a letter> + <alpha-numeric chars>
$hash = $userId . generateHash();

コメントに記載されているように、generateHash()関数が数字で始まっていないことを確認してください。

その場合、次のようになります。

$hash = $userId;
$letters = range ('a', 'z');
$pool = array_merge ($letters, range (0, 9));

for ($i = 0; $i < $lengthOfHash; ++$i)
{
    $chooseFrom = $pool;

    if ( ! $i )
        $chooseFrom = $letters;

    $hash .= $chooseFrom[array_rand($chooseFrom)];
}
于 2012-08-06T13:28:59.047 に答える