如何为我的数据库中插入的每一行生成一个15(字母数字)字符长度唯一字符串?

时间:2017-02-20 07:07:32

标签: php mysql forms laravel

我正在创建用户并将其保存在我的数据库表中。 我想创建一个名为:haskey的列,其中我为每个创建的用户存储一个随机且唯一的15位字母数字字符串,以便它对每个用户都是唯一的。我该怎么做?

5 个答案:

答案 0 :(得分:3)

Laravel内置了一个名为str_random()的辅助函数。您可以使用它来生成密钥。

str_random(15)

或者我建议您使用laravel hashids.

Laravel Hashids

在项目的根目录中将此包与Composer一起使用。

$ composer require vinkla/hashids

将服务提供者添加到providers数组中的config / app.php。

Vinkla\Hashids\HashidsServiceProvider::class

如果你想要,你可以使用立面。将config / app.php中的引用添加到别名数组中。

'Hashids' => Vinkla\Hashids\Facades\Hashids::class

用法

// You can alias this in config/app.php.
use Vinkla\Hashids\Facades\Hashids;

Hashids::encode(1);

// We're done here - how easy was that, it just works!
Hashids::decode('doyouthinkthatsairyourebreathingnow');

//这个例子很简单,有更多可用的方法。

答案 1 :(得分:1)

PHP有rand()

function generateRandomNumber($len = 16) {
    $char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $randomNumber = '';
    for ($i = 0; $i < $len; $i++) {
        $randomNumber .= $char[rand(0, $len - 1)];
    }
    return $randomNumber;
}

随机生成的值是唯一的。

答案 2 :(得分:1)

试试这个:

<?php
$serial = str_split('ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                     .'0123456789');
$haskey = '';
foreach (array_rand($serial, 15) as $a) $haskey.= $serial[$a];
    echo $haskey;
?>

插入&#39; $ haskey&#39;到数据库。虽然不保证不重复这些字符。

答案 3 :(得分:0)

您可以使用UUID Package根据RFC 4122标准创建ID,该标准对每个用户都是唯一的。 (普遍独特)

步骤1:根据您的laravel版本要求包装(以下步骤适用于Laravel 5。*)

composer require "webpatser/laravel-uuid:2.*"

第2步:修改config/app.php并添加别名。

'aliases' => [
    'Uuid' => Webpatser\Uuid\Uuid::class,
]

步骤3:现在您可以生成如下的UUID

Uuid::generate()

希望它对你有所帮助。

答案 4 :(得分:0)

自从你标记了这个Laravel后,我会给你一个Laravel解决方案。您可以轻松生成更真实的&#34;随机&#34;使用此函数的字母数字字符串:

use Illuminate\Support\Str;
$var = Str::random(15);
// $var => "kAQUxlywesTKLrP"
祝你好运!