|
|
|
พบปัญหาการ Random ค่าที่ได้ ซ้ำกัน เมื่อใช้การ Random ด้วย function rand() ของ PHP ครับ |
|
|
|
|
|
|
|
code คุณเขียนยังไงละครับ เพระาที่ผมลองเขียนดู มันไม่ซ้ำนะครับ
|
|
|
|
|
Date :
2011-10-13 10:47:22 |
By :
grandraftz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function randomToken($len, $branch_id, $gen_date, $next_num) {
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$ret_str = "";
$num = strlen($chars);
for($i=0; $i < $len; $i++) {
$ret_str.=$chars[rand(0,1000)%$num];
}
แล้วตรงนี้ ผมเอาเข้า ไปหาใน DB ครับ ว่ามีการใช้อยู่รึเปล่า ถ้ามี จะได้ค่า $num เป็น 1 ถ้าไม่มี เป็น 0
if($num==0){
return $code_rand;
}else{
return randomToken($len, $branch_id, $gen_date, $next_num);
}
}
|
|
|
|
|
Date :
2011-10-13 10:57:46 |
By :
ohmsc454 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มเขียนแบบนี้ออก คิดว่าตรงกับที่คุณต้องการนะ ลองเอาไปแปลงดุละกันครับ
Code (PHP)
<?php
function totext($val)
{
if ($val == 1)
{
return $val = 'A';
}else if ($val == 2)
{
return $val = 'B';
}else if ($val == 3)
{
return $val = 'C';
}else if ($val == 4)
{
return $val = 'D';
}else if ($val == 5)
{
return $val = 'E';
}else if ($val == 6)
{
return $val = 'F';
}else if ($val == 7)
{
return $val = 'G';
}else if ($val == 8)
{
return $val = 'H';
}else if ($val == 9)
{
return $val = 'I';
}else if ($val == 10)
{
return $val = 'J';
}else if ($val == 11)
{
return $val = 'K';
}else if ($val == 12)
{
return $val = 'L';
}else if ($val == 13)
{
return $val = 'M';
}else if ($val == 14)
{
return $val = 'N';
}else if ($val == 15)
{
return $val = 'O';
}else if ($val == 16)
{
return $val = 'P';
}else if ($val == 17)
{
return $val = 'Q';
}else if ($val == 18)
{
return $val = 'R';
}else if ($val == 19)
{
return $val = 'S';
}else if ($val == 20)
{
return $val = 'T';
}else if ($val == 21)
{
return $val = 'U';
}else if ($val == 22)
{
return $val = 'V';
}else if ($val == 23)
{
return $val = 'W';
}else if ($val == 24)
{
return $val = 'X';
}else if ($val == 25)
{
return $val = 'Y';
}else if ($val == 26)
{
return $val = 'Z';
}
}
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
echo $num = strlen($chars);
echo (26)%26;
for ($i=0;$i<=90;$i++)
{
$tall = "";
for ($j=1;$j<=3;$j++)
{
$t1 = rand(1,26);
$tall .= totext($t1);
}
echo "round $i = ".$tall."<br/>";
}
?>
|
|
|
|
|
Date :
2011-10-13 11:44:08 |
By :
grandraftz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คิดว่า ถ้าใช้แบบที่คุณ grandraft ใช้ แล้ว ไปเข้า loop การทำงานของผม คงไม่ต่างกับ ที่ใช้งานอยู่อ่ะครับ
เพราะว่าจาก code ที่ผมลองดู เอาไปใช้งาน แบบเพียวๆเลย มันก้อไม่ซ้ำนะครับ แต่พอเอาเข้าไปในระบบจริง ไหงมันซ้ำได้ก็ไม่รู้อ่ะครับ
= ="
เอาเป็นว่าขอขอบคุณในความช่วยเหลือละกัน ครับ
ตอนนี้ ใช้งาน function mt_rand() แทนอ่ะครับพอจะใช้งานได้
ไม่ทราบว่า มีใครพอจะบอกได้มั้ยครับ ว่า มันต่างกับ rand() ยังไง
|
|
|
|
|
Date :
2011-10-13 14:43:28 |
By :
ohmsc454 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 00
|