[sql-server]生成新独特字母数字字符串,

发布时间: 2014/3/6 22:19:58
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要生成一个字母数字字符串和与数据库的值进行比较但如果值是数据库中存在然后我们应生成一个不同的数字字符串和再次应与数据库值比较......

<?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 与数据库值比较应与数据库的值比较后希望你们能把 na? 请帮我修复此问题......

解决方法 1:

$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);

但在表的大小增大时,这是一大瓶颈。由于哈希值是字母和数字,为什么不能哈希只是开始与用户 Id?

//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)];
}
赞助商