生成唯一ID序列

时间:2017-05-02 04:22:36

标签: php

我想生成一个7号唯一ID,这是我要生成的函数。

function generate_guid($length){
    $alphabet = '1234567890';
    $tip = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < $length; $i ++) {
        $n = rand(0, $alphaLength);
        $tip[] = $alphabet[$n];
    }
    return implode($tip);
}

现在这是我的注册功能

function create_user($email, $name, $country, $password){

    $ipaddress = $_SERVER['REMOTE_ADDR'];    

    $guid = generate_guid(7);

    $active = 0;

    if (email_exists($email)) {
        return false;
    } else 
        if (name_exists($name)) {
            return false;
        } else {

            $hashed_password = password_hash($password, PASSWORD_BCRYPT);

            $db = dbconnect();

            //MyQuery Code//

            $stmt->close();            

            return true;
        }
}

现在我能够生成并且能够检查用户名和电子邮件是否存在。我的问题是如何检查guid是否存在而没有错误并生成新的插入数据库?或者,如果某人有更好的建议。我想要完成的主要事情必须是7长度所有数字。

我读到了有关唯一身份证的信息,但它说不保证,也有信件。有更好的方法吗?

我遇到了这个但是aspx how to generate unique id per user?是否可以按顺序生成我的函数?

2 个答案:

答案 0 :(得分:1)

试试这个:

function generate_guid($length){
    $alphabet = '1234567890';
    $tip = array();
    do{
        $uniqueId = substr(str_suffel($alphabet), 0, $length );
        //check uniquekey in database like you check unique username
        //something like that
        $sql = 'select * from tablename where uniqueId = "'.$uniqueId.'"';//if your using PDO, bind accordingly
        $result = mysqli_query($conn, $sql);
    }while(mysqli_num_rows($result)); //if no rows, loop will break and you would get uniqu id in $uniqueId variable
return $uniqueId;
}

答案 1 :(得分:1)

您可以尝试使用PHP从int生成唯一的 https://gist.github.com/Sommerregen/78e5ea478aacfd382323

当哈希数字然后将$ len更改为7 你可以散列microtime或其他增量数字,以确保它是唯一的。