作者buganini (霸格尼尼)
看板PHP
标题Re: [请益] 产生验证码
时间Sat Dec 8 19:31:24 2007
※ 引述《cloudlin322 (麦芽糖N  ﳿ︠)》之铭言:
: 想请问一下板上的高手
: 我现在要写个程式来产生验证码
: 而这验证码为7位数 由数字、大小写英文所产生
: 问题不在於如何产生
: 主要的问题在於我要产生六十万笔!!!!!!!!!!
: 而且每一笔都要不一样
: 想要请问怎样子写才会快??
: 目前做法:
: 产生的验证码去比对资料库,若是没有则储存到资料库里面
: 每产生一笔就要去比对一次
: 产生到第四万笔就要去比对四万笔资料
: 接下来就会速度很慢了....导致网页time out....
#!/usr/local/bin/php
<?php
$a=array();
$r='';
$a[$r]=1;
for($i=0;$i<600000;++$i){
while(isset($a[$r])){
$r=gen();
}
echo $i.':'.$r."\n";
$a[$r]=1;
}
function gen(){
$t='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$r='';
for($i=0;$i<7;++$i){
$r.=$t[rand(0,61)];
}
return $r;
}
?>
这样一下子就跑完了
记忆体能装的下的东西就装记忆体
快多了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 221.169.71.109
1F:→ buganini:在我可怜的笔电上跑1分钟11.46秒 12/08 19:33
2F:→ buganini:而且由於对hash做的最佳化 刚好在这问题上有效果 12/08 19:35
3F:→ buganini:所以isset()又会比塞进array再用in_array快 12/08 19:42
4F:推 cloudlin322:请问这样能确保每个值都是唯一的吗?? 12/08 19:44
5F:→ buganini:你说呢 12/08 19:50
6F:→ buganini:如果没写错的话应该是....但我无法确定我有没有脑残 12/08 19:50
7F:→ buganini:加上另一道检查跑了三次都没出错 12/08 19:57
8F:→ buganini:把substr($t,rand(0,61),1)改成$t[rand(0,61)] 12/08 20:00
9F:→ buganini:剩下42.34秒 12/08 20:01
※ 编辑: buganini 来自: 221.169.71.109 (12/08 20:01)
10F:→ buganini:直接redirect进档案应该会更快 12/08 20:03
11F:→ buganini:喔喔 刚刚42.34是因为我把画面切过来打逼了 12/08 20:04
12F:→ buganini:全程观看画面是1:02 全程不观看画面15.26秒 12/08 20:05
13F:→ buganini:OS:视窗真是吃资源... 12/08 20:05
14F:推 buganini:在我笔店上redirect进档案大概45~48秒 12/08 20:16