php之生成唯一字符串,PHP生成唯一随机字符串或ID的方法

使用rand随机函数生成随机字符串<?php

$str = "0123456789abcdefghijklmnopqrstuvwxyz~@#()_";//输出字符集

$n = 10;//输出串长度

$len = strlen($str)-1;

for($i=0 ; $i

$s .= $str[rand(0,$len)];

}

echo $s . "
";

$s = "";

?>

生成多组

$str = "0123456789abcdefghijklmnopqrstuvwxyz~@#()_";//输出字符集

$n = 10;//输出串长度

$len = strlen($str)-1;

for($j=0 ; $j<200 ; $j++){

for($i=0 ; $i

$s .= $str[rand(0,$len)];

}

echo $s . "
";

$s = "";

}

?>

使用PHP自带函数

PHP 7 为 CSPRNG 引入了两种新函数: random_bytes 与 random_int 。

random_bytes 函数返回 string 类型,并接受一个 int 类型为参数,该参数规定了所返回字符串的字节长度。

例如:$bytes = random_bytes('10');

var_dump(bin2hex($bytes));

//possible ouput: string(20) "7dfab0af960d359388e6"

random_int 函数返回给定范围内的整型数字。

举例:

var_dump(random_int(1, 100));

//possible output: 27

random_int 函数返回给定范围内的整型数字。

举例:

var_dump(random_int(1, 100));

//possible output: 27

uniqid();

uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。

rand();

可以用rand()和srand()配合来生成一个唯一的ID

md5(time());

使用MD5加密当前时间来生成唯一字符串

可以采用散列值、随机数、时间等方法,推荐GUID。

方法一:<?PHP

$str = uniqid(mt_rand(),1);

echo 'sha1: ',sha1($str);

echo '
';

echo 'MD5: ',md5($str);

?>

采用uniqid函数,配合mt_rand随机函数,最后使用散列值得出最终唯一值。

2012090916045257-300x177.png

但是通过测试中,发现随机数的唯一性有些相同部分,大概有11位相同的(但无大碍)2-300x184.png

第二种方法:GUID<?PHP

echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

echo "
";

echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

echo "
";

echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

echo "
";

echo sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));

?>

3-300x218.png

以上方法只是PHP中生成唯一字符串或ID的一部分,欢迎探讨

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值