Home  >  Article  >  Backend Development  >  生成100w个小写的英文数字混搭的字符串,多少位才能保证不重复

生成100w个小写的英文数字混搭的字符串,多少位才能保证不重复

WBOY
WBOYOriginal
2016-06-23 13:57:411266browse

生成100w个英文数字混搭的字符串 多少位怎么写才能最大限度保证不重复 请教一下


回复讨论(解决方案)

10个数字、26个大写字母、26个小写字母,共 62 中状态
即可视为 62 进制数
pow(62, 4) = 14776336
即当连续递增的情况下,14776336 个之后才会出现重复
远远满足你的需要

哦,没注意你只能是小写字母
那就是
pow(36, 4) = 1679616
也还是能够满足的

哦,没注意你只能是小写字母
那就是
pow(36, 4) = 1679616
也还是能够满足的

 
这样写产生9位的随机字符串  100w 应该没问题吧
/*     * 随机字符串   */   function random_str($length)   {  		$arr = array_merge(range('a', 'z'),range(0, 9));		$str = '';		$arr_len = count($arr);		for ($i = 0; $i < $length; $i++)		{			$rand = mt_rand(0, $arr_len-1);			$str.=$arr[$rand];		}		    return $str;   } 

这100w字符串 我想分几次生成  1次大约10w个 多次调用这个函数  这样的逻辑会产生重复吗

谢谢斑竹的热心帮忙 我明白了

不能猜测,应该验证一下

set_time_limit(0);mysql_connect();mysql_select_db('test');mysql_query('create temporary table a (ch varchar(9))');$len = 1000000;for($i=0; $i<$len; $i++) {  $c = random_str(9);  mysql_query("insert into a values ('$c')") or die(mysql_error());}$rs = mysql_query('select ch, count(*) as cnt from a group by 1 having cnt>1') or die(mysql_error());while($r = mysql_fetch_assoc($rs)) {  echo join(':', $r), PHP_EOL;}
一次产生一百万个确实没有重复

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn